|
Keil STM32 Debug (printf) viewer, Вопрос |
|
|
|
May 31 2013, 06:10
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 9-04-11
Пользователь №: 64 246

|
Здравствуйте. Пытаюсь совладать с отладчиком 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? Заранее благодарен, за любые советы.
|
|
|
|
|
May 31 2013, 09:39
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 9-04-11
Пользователь №: 64 246

|
Цитата(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 для отладки - вы могли бы показать его, если вас не затруднит.
|
|
|
|
|
May 31 2013, 09:58
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
нужно правильно проинициализирова дбг: 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");
и терь принтф
|
|
|
|
|
May 31 2013, 17:45
|
Участник

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

|
Подставить файл инициализации отладчика "stm32f4xx_swo.ini", чтобы настроить работу SWO.
|
|
|
|
|
Jul 17 2013, 11:17
|
Группа: Новичок
Сообщений: 8
Регистрация: 4-09-07
Пользователь №: 30 276

|
недавно бился над такойже проблемой. у меня все оказалось совсем просто: 1. на платах F3 F4 линия SWO пропущена через перемычку которая по умолчанию не замкнута. для F3 это SB10 а для F4 это SB12 2. из кода добавляем(для кейла): Код #include <stdio.h>
int fputc(int c, FILE *stream) { return(ITM_SendChar(c)); } открываем настройку устанавливаем частоту ядра, разрешаем трассировку и контролируем чтобы стояла галочка на 0 бите. профит. незабываем напаять перемычку.
|
|
|
|
|
Dec 26 2013, 16:14
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(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() при отладке?
--------------------
Благодарю заранее!
|
|
|
|
|
Dec 27 2013, 07:09
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(koluna @ Dec 26 2013, 20:14)  Определение "FILE" находится в файле "stdio.h": Код typedef struct __FILE FILE; А где определение "__FILE"? в arm-gcc в <sys/reent.h> Цитата Не будут ли слишком большими расходы на использование printf() при отладке? Нет не будут. Хотя если у вас загрузка контроллера близка к 100%, то будут....
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Dec 27 2013, 17:39
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(demiurg_spb @ Dec 27 2013, 11:09)  в arm-gcc в <sys/reent.h> У меня такого нет  В Кейле не нашел нигде. Цитата Нет не будут. Хотя если у вас загрузка контроллера близка к 100%, то будут.... Меня больше интересовали FLASH и RAM... Насколько я знаю, printf() весьма тяжеловесна, особенно в GCC.
--------------------
Благодарю заранее!
|
|
|
|
|
Jan 9 2014, 06:33
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(koluna @ Jan 2 2014, 15:06)  Как-то через GDB? Насколько я понял, пока никак. ИМХО это надо OpenOCD допиливать. Буду рад узнать, что ошибаюсь. Цитата(koluna @ Dec 27 2013, 21:39)  Меня больше интересовали FLASH и RAM... Насколько я знаю, printf() весьма тяжеловесна, особенно в GCC. Для меня не критично. Попробуйте с таким ключиком: Код LDFLAGS += --specs=nano.specs ссылка
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jan 17 2014, 16:05
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(demiurg_spb @ Jan 9 2014, 10:33)  Насколько я понял, пока никак. ИМХО это надо OpenOCD допиливать. Буду рад узнать, что ошибаюсь. Т. е., OpenOCD не умеет? Цитата Попробуйте с таким ключиком: Код LDFLAGS += --specs=nano.specs ссылкаНет такого ключа у меня  Еще вопрос. Почему-то часть отладочных данных теряется, т. е., в окне "Debug (printf) Viewer" присутствуют не все данные... такое ощущение, что часть отладочных пакетов теряется. Вы с таким не сталкивались?
--------------------
Благодарю заранее!
|
|
|
|
|
Jan 18 2014, 07:45
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(koluna @ Jan 17 2014, 20:05)  Т. е., OpenOCD не умеет? Насколько я понял, нет. Цитата Нет такого ключа у меня  В этих есть: https://launchpad.net/gcc-arm-embeddedhttp://www.freddiechopin.info/Цитата Еще вопрос. Почему-то часть отладочных данных теряется, т. е., в окне "Debug (printf) Viewer" присутствуют не все данные... такое ощущение, что часть отладочных пакетов теряется. Вы с таким не сталкивались? Что-то было подобное, вылечилось изменением параметров отладочного порта в keil. Дома у меня нет keil'a как доберусь до работы - посмотрю и отпишусь.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|