Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Возможно ли отладка в Keil по SWO
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MK2
Наткнулся в сети на вот эти документы
http://www.keil.com/download/files/labst.pdf
понравились прикольные плюшки с logic analazer и Trace Records
в наличии камень F407, отладчик st-link V2 и Keil 4.50
У ст-линка есть SWO. Решил попробывать это все у себя реализовать: поставил в настройках St-link Debugger и enable tracing (как на изображениях ниже)
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
... ничего так и не получилось ( - пустые) и главное не понятно как printf() через SWO отправлять...
Такой вопрос возможно ли осуществить продвинутую отладку в кейл с помощью ст-линк или все-таки u-link потребуется? Кто-нибудь пытался такое осуществить
Гугл не дал результатов.
Mitsufan
Отладка с помощью ST-Link/V2 в Keil через SWO уже работает.

1. Подставить файл инициализации отладчика "stm32f4xx_swo.ini", чтобы настроить работу SWO. Файл искать в примерах keil\arm\boards\st\stm3240g-eval.

2. Чтобы заработал printf() через ITM (в окно Debug Viewer) нужно переопределить fputs() в ITM_SendChar(). Там же в примерах есть файл retarget.c. На закладке Trace нужно снять галку Privelege/Port 7..0 - printf() работает через порт ITM0. И вообще для printf() достаточно только одной галки Enable/Port0, лишней информацией можно перегрузить сигнал SWO.

Вот здесь об этом подробнее: STMicroelectronics STM32: Cortex-M4 Lab
MK2
Спасибо за наводку. Вот тут нашел про ITM регистры http://www.keil.com/support/man/docs/ulink2/ulink2_tr..
Сделал как сказали... пропала кнопка "Trace Records Window" sm.gif Logic Analyzer стал писать
Нажмите для просмотра прикрепленного файла
C какой версии Кейл поддерживает SWO в St-link?
В лабораторной STMicroelectronics STM32: Cortex-M4 Lab говорится об её отсутствии... версия 4.22
Там же говорят что надо внимательно отнестись к тактированию... из-за него могут быть ошибки, что же, наступят будни надо будет на осциле внимательно тайминги проверить
Кстати, на счет них. Где задается\определяется\посмотреть_можно скорость отладки, ну допустим хотя бы для того же Logic Analyzer
на вкладке Debug cледуюшие опции установлены:
Нажмите для просмотра прикрепленного файла
а на Trace следующие:
Нажмите для просмотра прикрепленного файла
причем если снять autodetect то можно любой делитель установить и получить любую частоту (правда не понятно чего). не может ли здесь крыться ошибка? для Timestamp тоже непонятно для чего выставляешь делитель
сайт кейла на счет Restriction'ов упорно молчит
Mitsufan
Поддержка SWO в Keil для stlink появилась в 4.50. Настройка совместима с ulink, поэтому все что описано в лабораторной для ulink подходит теперь и stlink. Вот выдержка из релиза:

For backward compability of projects the old STLink Debugger driver has been marked as deprecated. Please update your projects to the version STLink Debugger. The new STLink Debugger features and configuration dialog matches ULink2. In particular Serial Wire Output is now supported.

Для работы Trace нужно открывать дополнительные порты ITM, порт ITM0 только для printf(). На 12 странице лабораторной есть нужная картинка. Вообще, там все очень хорошо расписано.
esaulenka
Ура! У меня наконец дошли руки попробовать SWV.
printf работает просто замечательно (быстро и не жрёт ком-порт)!

Только такой вопрос: вывод этого ITM Viewer в файл можно сохранить? Даже выделить, блин, нельзя...
Очень хочется цифирь, что оттуда лезет, поанализировать...

Использую Keil3 (как-то так сложилось), но по такому случаю могу перейти и на Keil4.
diwil
Цитата(esaulenka @ May 15 2012, 21:47) *
Ура! У меня наконец дошли руки попробовать SWV.
printf работает просто замечательно (быстро и не жрёт ком-порт)!

Только такой вопрос: вывод этого ITM Viewer в файл можно сохранить? Даже выделить, блин, нельзя...
Очень хочется цифирь, что оттуда лезет, поанализировать...

Использую Keil3 (как-то так сложилось), но по такому случаю могу перейти и на Keil4.


А вот у меня не получается...
stm32f4-discovery.

Я объявляю:


#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA 0x01000000

struct __FILE { int handle; /* Add whatever needed */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
}



далее, если в коде ставлю printf(), то у кейла 4.53 крышу сносит напрочь! он перестает видеть breakpoints, у него становится совершенно не отслеживаемая последовательность выполнения действий.

Что может это быть?
esaulenka
Цитата
далее, если в коде ставлю printf(), то у кейла 4.53 крышу сносит напрочь!

Это какая-то странная фича библиотек - консоль там организована через JTAG (с помощью обработчика, который вешается на SWI).
Как заставить её работать, я не знаю. Отключается это безобразие добавлением строки в исходник:
#pragma import(__use_no_semihosting_swi)

А вообще - заставили бы для начала printf'ы в UART выводить. Оно роднее :-)
diwil
Цитата(esaulenka @ May 16 2012, 12:42) *
А вообще - заставили бы для начала printf'ы в UART выводить. Оно роднее :-)



Неееее !!!!
у меня и в уарты лезит и через ЮСБ тоже передается...

оно, после часа танцев с бубном, ЗАРАБОТАЛО!
заработали принтфы, бряки, вотчи и даже логический анализатор!

чему я безумственно рад...
MK2
diwil, не могли бы вы выложить скрин как вы настроили дебагер в кейле для 4-ого дискавери?
diwil
Цитата(MK2 @ May 28 2012, 15:02) *
diwil, не могли бы вы выложить скрин как вы настроили дебагер в кейле для 4-ого дискавери?


да, вот настройки - опции отладки
Allregia
Коллеги, у меня та-же фигня, только не с ST-Link а с J-Link.
Плата своя, рабочая, проц 407VGT, вот только с отладкой через Debug (printf) Viewer не получается.

Код стандартный:
Код
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000

struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f)
{
  if (DEMCR & TRCENA) {
    while (ITM_Port32(0) == 0);   <<<<<<<<<<<<<<  ВОТ ТУТА ОНО ВИСНЕТ, если включен trace
    ITM_Port8(0) = ch;
  }
  return (ch);
}


Keil 4.22a

P.S. Что-то мне как-то стремно на более новые перелазить, да и большинство готовых и сопровождаемых проектов пока под lpc1768.
Говорят в более новых глюков много, или уже пора?
Allregia
И еще один прикол - на макетной плате с 407-м оторвался конденсатор на 73-й ножке.
После припайки его обратно процессор прекрасно работает с последней зашитой в него программой, но зашить (JLink в SWD) в него другую не получается - "Cannot Erase". Дебаг поняно дело тоже не работает.
Придется завтра перепаивать чип.
demiurg_spb
Цитата(Allregia @ May 30 2012, 13:18) *
Коллеги, у меня та-же фигня, только не с ST-Link а с J-Link.
У меня сложилось впечатление, что с J-Link эта фича не работает. Я тоже попрыгал с бубном - результат нулевой.
vlad_new
Цитата
но зашить (JLink в SWD) в него другую не получается

Странно. Должен был просто затереть кусок программы при подключении дебагера. А раз прога все равно работает, то скорее всего
либо накрылись лапы SWD либо при запуске проца, программа, сразу же запрещает режим отладки.
Вообще в таких ситуациях надо включить проц в режим BOOT и тогда уже должен появиться доступ через дебагер по SWD.

Allregia
Цитата(vlad_new @ Jun 2 2012, 19:51) *
Странно. Должен был просто затереть кусок программы при подключении дебагера.


Так он же пишет что не может стереть.
Что при Load, что при Debug.

Цитата
А раз прога все равно работает, то скорее всего либо накрылись лапы SWD


JLink по SWD при этом проц видит и правильно определяет.

Цитата
либо при запуске проца, программа, сразу же запрещает режим отладки.
Да нет, там ничего такого нет, в момент аварии была зашита простенькая тестовая программка.
Цитата
Вообще в таких ситуациях надо включить проц в режим BOOT и тогда уже должен появиться доступ через дебагер по SWD.


В какой именно режим? У меня boot1 и boot0 сидят на 0.
vlad_new
А фиолетово какой BOOT, лижбы он запустился, а не прога в камне. Далее запускаем ST-LINK Utility, включаем SWD, запускаем connect и снимаем галку защиты.
( ну или какую то еще прогу, которая может бит защиты снять ).
На предупреждение, что прога удалится - соглашаемся. После этого должно все зафурычить.

Allregia
Цитата(vlad_new @ Jun 3 2012, 23:16) *
А фиолетово какой BOOT, лижбы он запустился, а не прога в камне. Далее запускаем ST-LINK Utility, включаем SWD, запускаем connect и снимаем галку защиты.


У меня нет ST-Link, там J-Link8. В его утилите я смотрел. но ничего криминального не обнаружил.

Цитата
( ну или какую то еще прогу, которая может бит защиты снять ).
На предупреждение, что прога удалится - соглашаемся. После этого должно все зафурычить.


Перепаял проц- все зафурычило.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.