Easyelectronics.ru

Электроника для всех
Текущее время: 07 апр 2020, 22:40

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 15:16 
Только пришел

Зарегистрирован: 25 сен 2011, 21:27
Сообщения: 15
Вопрос про отладку stm32f1 (юзаю st-link). Обновился недавно до Keil 4.60, но по-прежнему не могу нормально отлаживаться - в окне Watch какие-то левые значения при отображении массивов. Например, buf[1] показывает 0x1A, в то время как на самом деле он 0x01. Значения остальных типов переменных отображаются нормально. Это у всех так? Вроде ещё в анотациях к предыдущим версиям кейла писали, что "Corrected: Under some circumstances the Debugger showed wrong values of arrays or structures in the Watch window.". А выходит, что воз и поныне там...

Toolchain: MDK-ARM Standard Version: 4.60.0.0
Middleware: RL-ARM Real-Time Library Version V4.13
Assembler: Armasm.Exe V5.02.0.28
Linker/Locator: ArmLink.exe V5.02.0.28
Librarian/Locator: ArmAr.exe V5.02.0.28
Hex converter: FromElf.exe V5.02.0.28
CPU DLL: SARMCM3.DLL V4.60.0.0
Dialog DLL: DARMSTM.DLL V1.64.0.0
Target DLL: STLink\ST-LINKII-KEIL.dll
Dialog DLL: TARMSTM.DLL V1.64.0.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 16:48 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
не замечал пока.
Что с этим массивом работает. Пожалуйста, скриншоты в студию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 20:28 
Только пришел

Зарегистрирован: 25 сен 2011, 21:27
Сообщения: 15
dima2611 писал(а):
не замечал пока.
Что с этим массивом работает. Пожалуйста, скриншоты в студию.


Локальная переменная в известной многим библиотеке для работы с 1wire посредством uart на stm32. Если максимально упростить код, но чтобы проблема сохранялась, получится следующее:
Изображение
- в дебагере до выполнения 0W_Test в buf2 в watch1 отображается 0х12 и 0х34, а уже после вызова 0W_Test() - нули (см. скриншот), хотя в реальности также сохраняются значения 0х12 и 0х34.

- OW_Test расположена в другом файле, onewire.c:
uint8_t OW_Test(void){ return 0; }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 20:32 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
Локальные переменные у меня еще ни разу правильно в деваге не отображались. Иногда просто тупо пишет out of scope, хотя остановка там, где она объявлена. Как-то получается, что их не видно, что очень жаль и усложняет отладку. Вынесете в глобал и посмотрите.

И на будущее про еще одни грабли: если у Вас в массивы пишется по ДМА самоходом, то этот процесс не останавливается на брейкпоинте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 22:39 
Только пришел

Зарегистрирован: 25 сен 2011, 21:27
Сообщения: 15
dima2611 писал(а):
И на будущее про еще одни грабли: если у Вас в массивы пишется по ДМА самоходом, то этот процесс не останавливается на брейкпоинте.


Про DMA я знаю. В данном случае он не используется. Про совет с глобал - спасибо, похоже, иначе никак... Вообще, printf() с выводом в uart решает)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 22:58 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
tzirulnicov писал(а):
dima2611 писал(а):
И на будущее про еще одни грабли: если у Вас в массивы пишется по ДМА самоходом, то этот процесс не останавливается на брейкпоинте.


Про DMA я знаю. В данном случае он не используется. Про совет с глобал - спасибо, похоже, иначе никак... Вообще, printf() с выводом в uart решает)

В Keil можно писать функции для дебаггера. Грузится через Debug -> Function editor (open ini file).
Данный пример пишет в файл. Но надо остановиться на брейке. Будет окошко плавать с кнопками
Код:
FUNC void hex_values(void)
{
   int i;
   unsigned int a;

   exec("log > c:\\hex.log");

   for(i = 0; i < 120000 / 4; i = i + 4)
   {
      a = (picbuffer[i] & 0x000000FF) >>  0; printf("$%x, ", a);
      a = (picbuffer[i] & 0x0000FF00) >>  8; printf("$%x, ", a);
      a = (picbuffer[i] & 0x00FF0000) >> 16; printf("$%x, ", a);
      a = (picbuffer[i] & 0xFF000000) >> 24; printf("$%x, ", a);
      printf("%s", "    ");
      a = (picbuffer[i + 1] & 0x000000FF) >>  0; printf("$%x, ", a);
      a = (picbuffer[i + 1] & 0x0000FF00) >>  8; printf("$%x, ", a);
      a = (picbuffer[i + 1] & 0x00FF0000) >> 16; printf("$%x, ", a);
      a = (picbuffer[i + 1] & 0xFF000000) >> 24; printf("$%x, ", a);
      printf("%s", "    ");
      a = (picbuffer[i + 2] & 0x000000FF) >>  0; printf("$%x, ", a);
      a = (picbuffer[i + 2] & 0x0000FF00) >>  8; printf("$%x, ", a);
      a = (picbuffer[i + 2] & 0x00FF0000) >> 16; printf("$%x, ", a);
      a = (picbuffer[i + 2] & 0xFF000000) >> 24; printf("$%x, ", a);
      printf("%s", "    ");
      a = (picbuffer[i + 3] & 0x000000FF) >>  0; printf("$%x, ", a);
      a = (picbuffer[i + 3] & 0x0000FF00) >>  8; printf("$%x, ", a);
      a = (picbuffer[i + 3] & 0x00FF0000) >> 16; printf("$%x, ", a);
      a = (picbuffer[i + 3] & 0xFF000000) >> 24; printf("$%x, ", a);
   }
   exec("log off");
}

FUNC void raw_values(void)
{
   int i;

   exec("log > c:\\raw.hex");

   for(i = 0; i < 1000; i++)
   {
      printf("%c", output[i]);
   }
   exec("log off");
}

define button "raw values", "raw_values()"
undefine button "hex values", "hex_values()"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отладка в Keil uVision: неверные значения в массивах
СообщениеДобавлено: 16 дек 2012, 23:10 
Только пришел

Зарегистрирован: 25 сен 2011, 21:27
Сообщения: 15
Спасибо!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB