|
Возможно ли отладка в Keil по SWO |
|
|
|
Apr 30 2012, 11:46
|

Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535

|
Наткнулся в сети на вот эти документы 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 потребуется? Кто-нибудь пытался такое осуществить Гугл не дал результатов.
|
|
|
|
|
Apr 30 2012, 18:03
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 13-03-07
Пользователь №: 26 123

|
Отладка с помощью 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
Сообщение отредактировал Mitsufan - Apr 30 2012, 18:16
|
|
|
|
|
Apr 30 2012, 22:08
|

Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535

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

Группа: Участник
Сообщений: 31
Регистрация: 13-03-07
Пользователь №: 26 123

|
Поддержка 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 странице лабораторной есть нужная картинка. Вообще, там все очень хорошо расписано.
|
|
|
|
|
May 16 2012, 07:51
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(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, у него становится совершенно не отслеживаемая последовательность выполнения действий. Что может это быть?
|
|
|
|
|
May 16 2012, 08:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата далее, если в коде ставлю printf(), то у кейла 4.53 крышу сносит напрочь! Это какая-то странная фича библиотек - консоль там организована через JTAG (с помощью обработчика, который вешается на SWI). Как заставить её работать, я не знаю. Отключается это безобразие добавлением строки в исходник: #pragma import(__use_no_semihosting_swi) А вообще - заставили бы для начала printf'ы в UART выводить. Оно роднее :-)
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
May 16 2012, 08:51
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(esaulenka @ May 16 2012, 12:42)  А вообще - заставили бы для начала printf'ы в UART выводить. Оно роднее :-) Неееее !!!! у меня и в уарты лезит и через ЮСБ тоже передается... оно, после часа танцев с бубном, ЗАРАБОТАЛО! заработали принтфы, бряки, вотчи и даже логический анализатор! чему я безумственно рад...
|
|
|
|
|
May 28 2012, 12:35
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(MK2 @ May 28 2012, 15:02)  diwil, не могли бы вы выложить скрин как вы настроили дебагер в кейле для 4-ого дискавери? да, вот настройки - опции отладки
Эскизы прикрепленных изображений
|
|
|
|
|
May 30 2012, 10:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Коллеги, у меня та-же фигня, только не с 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. Говорят в более новых глюков много, или уже пора?
Сообщение отредактировал IgorKossak - Jun 1 2012, 09:35
Причина редактирования: поднятие темы запрещено правилами
|
|
|
|
|
Jun 2 2012, 17:51
|
Местный
  
Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127

|
Цитата но зашить (JLink в SWD) в него другую не получается Странно. Должен был просто затереть кусок программы при подключении дебагера. А раз прога все равно работает, то скорее всего либо накрылись лапы SWD либо при запуске проца, программа, сразу же запрещает режим отладки. Вообще в таких ситуациях надо включить проц в режим BOOT и тогда уже должен появиться доступ через дебагер по SWD.
|
|
|
|
|
Jun 2 2012, 21:09
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(vlad_new @ Jun 2 2012, 19:51)  Странно. Должен был просто затереть кусок программы при подключении дебагера. Так он же пишет что не может стереть. Что при Load, что при Debug. Цитата А раз прога все равно работает, то скорее всего либо накрылись лапы SWD JLink по SWD при этом проц видит и правильно определяет. Цитата либо при запуске проца, программа, сразу же запрещает режим отладки. Да нет, там ничего такого нет, в момент аварии была зашита простенькая тестовая программка. Цитата Вообще в таких ситуациях надо включить проц в режим BOOT и тогда уже должен появиться доступ через дебагер по SWD. В какой именно режим? У меня boot1 и boot0 сидят на 0.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|