Перейти к содержанию
    

Здравствуйте.

 

Пытаюсь совладать с отладчиком 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?

 

Заранее благодарен, за любые советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читайте доку на отладчик.

У меня J-Link, так я тоже года полтора назад воевал с ITM - тогда ничего не вышло, я даже тему создавал по этому вопросу - тишина....

А недавно потребовалось что-то пошаманить с J-Link, я открыл pdf на него - узнал много нового:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это уже было -

1. поискать (хоть по моему нику) здесь как выставлять флажки отладчика в кейле. Не забыть указать правильные частоты.

2. Обновить все st-link'и до последней версии.

 

у меня дискавери L,3,4 - все работают. Так же работают и самодельные платы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. поискать (хоть по моему нику) здесь как выставлять флажки отладчика в кейле. Не забыть указать правильные частоты.

 

 

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

Меня интересует именно printf отладка.

 

2. Обновить все st-link'и до последней версии.

 

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

 

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

Не помогло.

 

у меня дискавери L,3,4 - все работают.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно правильно проинициализирова дбг:

// ============================================================================
#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");

 

и терь принтф

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подставить файл инициализации отладчика "stm32f4xx_swo.ini", чтобы настроить работу SWO.

post-26123-1370022241_thumb.png

stm32f4xx_swo.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Keil есть соответствующий Application Note... по этой теме...

http://www.keil.com/appnotes/docs/apnt_230.asp

ну и еще можно и этот почитать...

http://www.keil.com/appnotes/docs/apnt_197.asp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

недавно бился над такойже проблемой. у меня все оказалось совсем просто:

1. на платах F3 F4 линия SWO пропущена через перемычку которая по умолчанию не замкнута. для F3 это SB10 а для F4 это SB12

2. из кода добавляем(для кейла):

#include <stdio.h>

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

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

 

профит. незабываем напаять перемычку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

недавно бился над такойже проблемой. у меня все оказалось совсем просто:

1. на платах F3 F4 линия SWO пропущена через перемычку которая по умолчанию не замкнута. для F3 это SB10 а для F4 это SB12

2. из кода добавляем(для кейла):

 

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

typedef struct __FILE FILE;

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

 

Кстати, что значат галки "Privilege" в блоке настроек "ITM Stimulus Ports" в Кейле?

Зачем указывать частоту ядра?

Не будут ли слишком большими расходы на использование printf() при отладке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

typedef struct __FILE FILE;

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

в arm-gcc в <sys/reent.h>

 

Не будут ли слишком большими расходы на использование printf() при отладке?
Нет не будут. Хотя если у вас загрузка контроллера близка к 100%, то будут....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в arm-gcc в <sys/reent.h>

 

У меня такого нет :)

В Кейле не нашел нигде.

 

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

 

Меня больше интересовали FLASH и RAM...

Насколько я знаю, printf() весьма тяжеловесна, особенно в GCC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С Кейлом понятно, работает...

А, каким образом можно получить информацию с SWO (ST-Link) под Линухом?

Как-то через GDB?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то через GDB?
Насколько я понял, пока никак.

ИМХО это надо OpenOCD допиливать.

Буду рад узнать, что ошибаюсь.

 

 

Меня больше интересовали FLASH и RAM...

Насколько я знаю, printf() весьма тяжеловесна, особенно в GCC.

Для меня не критично.

Попробуйте с таким ключиком:

LDFLAGS += --specs=nano.specs

ссылка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я понял, пока никак.

ИМХО это надо OpenOCD допиливать.

Буду рад узнать, что ошибаюсь.

 

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

 

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

ссылка

 

Нет такого ключа у меня :(

 

Еще вопрос.

Почему-то часть отладочных данных теряется, т. е., в окне "Debug (printf) Viewer" присутствуют не все данные... такое ощущение, что часть отладочных пакетов теряется.

Вы с таким не сталкивались?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т. е., OpenOCD не умеет?
Насколько я понял, нет.

Нет такого ключа у меня :(

В этих есть:

https://launchpad.net/gcc-arm-embedded

http://www.freddiechopin.info/

 

Еще вопрос.

Почему-то часть отладочных данных теряется, т. е., в окне "Debug (printf) Viewer" присутствуют не все данные... такое ощущение, что часть отладочных пакетов теряется.

Вы с таким не сталкивались?

Что-то было подобное, вылечилось изменением параметров отладочного порта в keil.

Дома у меня нет keil'a как доберусь до работы - посмотрю и отпишусь.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...