Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil STM32 Debug (printf) viewer
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Нортон
Здравствуйте.

Пытаюсь совладать с отладчиком Keil (v4.7). У меня куча плат Discovery, ну и программатор естественно встроенный в них SWD.

Переменные и память смотрятся, Event Counters, Exception Trace и Trace Records успешно запускаются и работают. Единственное, что не удалось запустить это Debug (Printf) Viewer.

Гуглом пользовался, и пробовал разные варианты - большая их часть сводится к http://armcortexm.blogs.upv.es/stm32f4-dis...viewer-in-keil/.

Но так и не работает у меня этот вывод.

Может, есть какой-то секрет или с помощью SWD на DISCOVERY этого вообще нельзя сделать и нужен какой-нибудь UlinkPro?

Заранее благодарен, за любые советы.
demiurg_spb
Читайте доку на отладчик.
У меня J-Link, так я тоже года полтора назад воевал с ITM - тогда ничего не вышло, я даже тему создавал по этому вопросу - тишина....
А недавно потребовалось что-то пошаманить с J-Link, я открыл pdf на него - узнал много новогоsm.gif
diwil
это уже было -
1. поискать (хоть по моему нику) здесь как выставлять флажки отладчика в кейле. Не забыть указать правильные частоты.
2. Обновить все st-link'и до последней версии.

у меня дискавери L,3,4 - все работают. Так же работают и самодельные платы.
Нортон
Цитата(diwil @ May 31 2013, 12:48) *
1. поискать (хоть по моему нику) здесь как выставлять флажки отладчика в кейле. Не забыть указать правильные частоты.



Я выставляю правильную частоту. Event Counters, Exception Trace, Trace Records и Logic Analyzer у меня работают - а работают они только на правильно выставленной частоте.
Меня интересует именно printf отладка.

Цитата(diwil @ May 31 2013, 12:48) *
2. Обновить все st-link'и до последней версии.


Сейчас попробую.

Цитата(Нортон @ May 31 2013, 13:05) *
Сейчас попробую.

Не помогло.

Цитата(diwil @ May 31 2013, 12:48) *
у меня дискавери L,3,4 - все работают.

Может если у вас есть уже проекты keil с использованием printf для отладки - вы могли бы показать его, если вас не затруднит.
diwil
нужно правильно проинициализирова дбг:
CODE

// ============================================================================
#define DWT_CYCCNT *(volatile uint32_t *)0xE0001004
#define DWT_CONTROL *(volatile uint32_t *)0xE0001000
#define SCB_DEMCR *(volatile uint32_t *)0xE000EDFC


static void
DWT_Init()
{
SCB_DEMCR |= 0x01000000;
DWT_CYCCNT = 0;
DWT_CONTROL|= 1; // enable the counter
}

#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; };
FILE __stdout;
FILE __stdin;

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

// In main():

DWT_Init();

printf("Ehlo world!\n");


и терь принтф
Mitsufan
Подставить файл инициализации отладчика "stm32f4xx_swo.ini", чтобы настроить работу SWO.
Нажмите для просмотра прикрепленного файла
UniSoft
У Keil есть соответствующий Application Note... по этой теме...
http://www.keil.com/appnotes/docs/apnt_230.asp
ну и еще можно и этот почитать...
http://www.keil.com/appnotes/docs/apnt_197.asp
SherbinaVitaly
недавно бился над такойже проблемой. у меня все оказалось совсем просто:
1. на платах F3 F4 линия SWO пропущена через перемычку которая по умолчанию не замкнута. для F3 это SB10 а для F4 это SB12
2. из кода добавляем(для кейла):
Код
#include <stdio.h>

int fputc(int c, FILE *stream)
{
   return(ITM_SendChar(c));
}

открываем настройку устанавливаем частоту ядра, разрешаем трассировку и контролируем чтобы стояла галочка на 0 бите.

профит. незабываем напаять перемычку.
koluna
Цитата(SherbinaVitaly @ Jul 17 2013, 15:17) *
недавно бился над такойже проблемой. у меня все оказалось совсем просто:
1. на платах F3 F4 линия SWO пропущена через перемычку которая по умолчанию не замкнута. для F3 это SB10 а для F4 это SB12
2. из кода добавляем(для кейла):


Определение "FILE" находится в файле "stdio.h":
Код
typedef struct __FILE FILE;

А где определение "__FILE"?

Кстати, что значат галки "Privilege" в блоке настроек "ITM Stimulus Ports" в Кейле?
Зачем указывать частоту ядра?
Не будут ли слишком большими расходы на использование printf() при отладке?
demiurg_spb
Цитата(koluna @ Dec 26 2013, 20:14) *
Определение "FILE" находится в файле "stdio.h":
Код
typedef struct __FILE FILE;

А где определение "__FILE"?
в arm-gcc в <sys/reent.h>

Цитата
Не будут ли слишком большими расходы на использование printf() при отладке?
Нет не будут. Хотя если у вас загрузка контроллера близка к 100%, то будут....
koluna
Цитата(demiurg_spb @ Dec 27 2013, 11:09) *
в arm-gcc в <sys/reent.h>


У меня такого нет sm.gif
В Кейле не нашел нигде.

Цитата
Нет не будут. Хотя если у вас загрузка контроллера близка к 100%, то будут....


Меня больше интересовали FLASH и RAM...
Насколько я знаю, printf() весьма тяжеловесна, особенно в GCC.
koluna
С Кейлом понятно, работает...
А, каким образом можно получить информацию с SWO (ST-Link) под Линухом?
Как-то через GDB?
demiurg_spb
Цитата(koluna @ Jan 2 2014, 15:06) *
Как-то через GDB?
Насколько я понял, пока никак.
ИМХО это надо OpenOCD допиливать.
Буду рад узнать, что ошибаюсь.


Цитата(koluna @ Dec 27 2013, 21:39) *
Меня больше интересовали FLASH и RAM...
Насколько я знаю, printf() весьма тяжеловесна, особенно в GCC.
Для меня не критично.
Попробуйте с таким ключиком:
Код
LDFLAGS += --specs=nano.specs
ссылка
koluna
Цитата(demiurg_spb @ Jan 9 2014, 10:33) *
Насколько я понял, пока никак.
ИМХО это надо OpenOCD допиливать.
Буду рад узнать, что ошибаюсь.


Т. е., OpenOCD не умеет?

Цитата
Попробуйте с таким ключиком:
Код
LDFLAGS += --specs=nano.specs
ссылка


Нет такого ключа у меня sad.gif

Еще вопрос.
Почему-то часть отладочных данных теряется, т. е., в окне "Debug (printf) Viewer" присутствуют не все данные... такое ощущение, что часть отладочных пакетов теряется.
Вы с таким не сталкивались?
demiurg_spb
Цитата(koluna @ Jan 17 2014, 20:05) *
Т. е., OpenOCD не умеет?
Насколько я понял, нет.
Цитата
Нет такого ключа у меня sad.gif

В этих есть:
https://launchpad.net/gcc-arm-embedded
http://www.freddiechopin.info/

Цитата
Еще вопрос.
Почему-то часть отладочных данных теряется, т. е., в окне "Debug (printf) Viewer" присутствуют не все данные... такое ощущение, что часть отладочных пакетов теряется.
Вы с таким не сталкивались?
Что-то было подобное, вылечилось изменением параметров отладочного порта в keil.
Дома у меня нет keil'a как доберусь до работы - посмотрю и отпишусь.
k000858
Всем привет!
Можно ли научить OpenOCD выводить printf (SWO) с ST-Link/v2 ?
kolobok0
Цитата(k000858 @ Jan 19 2014, 13:30) *
..выводить printf (SWO) с ST-Link/v2 ?


при сравнении стлинка и джетлинк флэша - последний не смог поддержать SWO.
стлинк без проблем поддерживает, правда более глючный он (у меня по крайней мере такое наблюдаю) - отваливается иногда.
Тут даже интересную картинку наблюдал, стлинк отвалился в момент отладки. Отвалился на уровне дров форточки.
Пока сам кристал не выключил-включил, упорно бряколось на ранее установленной точке, даже при удалённии всех брэйкпоинтов
в IARе.
k000858
Цитата(kolobok0 @ Jan 19 2014, 14:39) *
при сравнении стлинка и джетлинк флэша - последний не смог поддержать SWO.
стлинк без проблем поддерживает, правда более глючный он (у меня по крайней мере такое наблюдаю) - отваливается иногда.
Тут даже интересную картинку наблюдал, стлинк отвалился в момент отладки. Отвалился на уровне дров форточки.
Пока сам кристал не выключил-включил, упорно бряколось на ранее установленной точке, даже при удалённии всех брэйкпоинтов
в IARе.

Сам ST-Link/v2 у меня прекрасно работает в Keil'е и тд (SWD/SWF - printview)
Так же отладчик прекрасно работает с OpenOCD (в режиме SWD) в связке с Eclipse

Осталось научить его выводить отладочные строки (printf - ITM_SendChar)
GDB клиент запускаю с параметром arm semihosting enable
koluna
Цитата(demiurg_spb @ Jan 18 2014, 11:45) *
Что-то было подобное, вылечилось изменением параметров отладочного порта в keil.
Дома у меня нет keil'a как доберусь до работы - посмотрю и отпишусь.


Посмотрите, пожалуйста. Буду ждать.
А то работает как-то криво sad.gif
k000858
Так ни кому и не удалось научить GDB + OpenOCD выводить ITM (Instrumentation Trace Macrocell) инфу (printf) ?
koluna
Цитата(k000858 @ Jan 21 2014, 06:42) *
Так ни кому и не удалось научить GDB + OpenOCD выводить ITM (Instrumentation Trace Macrocell) инфу (printf) ?


Я пока не пробовал.
Нет острой необходимости, выяснял насколько это трудно и возможно ли вообще...
koluna
Цитата(demiurg_spb @ Jan 18 2014, 11:45) *
Дома у меня нет keil'a как доберусь до работы - посмотрю и отпишусь.


Уважаемый, Вы про нас не забыли? sm.gif
demiurg_spb
Цитата(koluna @ Jan 24 2014, 12:18) *
Уважаемый, Вы про нас не забыли? sm.gif
Помню. На работу лишь с февраля...
koluna
Цитата(demiurg_spb @ Jan 24 2014, 15:13) *
Помню. На работу лишь с февраля...


Ууу... понятно sm.gif
Будем ждать.

Сейчас настройки такие:
demiurg_spb
Цитата(koluna @ Jan 24 2014, 14:24) *
Будем ждать.
Нажмите для просмотра прикрепленного файла
Ruslan1
Угу. И пользоваться можно до первого чиха.
Даже в 144-пиновом корпусе 32F407 невозможно оставить этот SWD_SWO пустым, так как он завязан на клок двух SPI. Ну зачем они так жестоко поступили....
Мне нужно два DAC, Ethernet RMII, два SPI (один достаточно RX only Master), 4-bit SDIO - и все, невозможно этот RB3 отдать, не размапировать это на QFP144. sad.gif

Это к чему- закладывайте еще какие-нибудь средства, типа UART- в любой момент можете наткнуться на невозможность пользоваться этой ногой для отладки.

Хотя зато смог туеву хучу периферии в параллель подключить, начиная с четырех UART (три с аппаратными RTS/CTS), два USB, I2C, два SPI, CAN.... Это отлично, всегда свободный интерфейс для отладочного принта найдется. sm.gif

Интересно, можно эту ногу SWD_SWO софтверно эмулировать? ну, то есть использовать любую ногу и подключить свою функцию putchar() для вывода отладочной инфы, но стандартно, чтобы обычные отладчики принимали ее за SWO?
koluna
Спасибо всем большое! sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.