Jump to content

    
Sign in to follow this  
dkukushkin

printf в IAR 5.5

Recommended Posts

Для удобства хочется видеть под отладчиком что печатается с помощью printf. Среда IAR 5.5, контроллер ARM7S, отладчик JetLink 5.

 

Нашел что вроде как нужно включить C-Spy в опциях проекта, Linker, вкладка Output и смотреть в IO Terminal. Но на этой вкладке у меня почему-то только 1 флаг и 1 текстовое поле: "Output file" и "Include debug information in output" соответственно. Никаких других элементов там нет. В IO Terminal пусто -- никакой информации не выводится вообще. Скачал полную версию -- то же самое.

 

Собственно, что делать? Как увидеть что выводится с помощью printf? Уже 2 дня бьюсь...

Share this post


Link to post
Share on other sites
Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками.

 

Ага. Особенно удобно текст сообщения по 1-й букве читать. То что читалось бы за минуту -- нужно будет целый день по букве читать. Это же все для удобства и экономии времени делается. Должно же быть решение?

Share this post


Link to post
Share on other sites
Для удобства хочется видеть под отладчиком что печатается с помощью printf. Среда IAR 5.5, контроллер ARM7S, отладчик JetLink 5.

...
volatile char g_print_buffer[HOW_MACH_NEED_BYTES] = {0, };
volatile int idx = 0;
...
int putchar(int c)
{
    g_print_buffer[g_idx] = c;
    g_idx++;
    if(g_idx >= HOW_MACH_NEED_BYTES)
        g_idx = 0;        
}

Share this post


Link to post
Share on other sites
...
volatile char g_print_buffer[HOW_MACH_NEED_BYTES] = {0, };
volatile int idx = 0;
...
int putchar(int c)
{
    g_print_buffer[g_idx] = c;
    g_idx++;
    if(g_idx >= HOW_MACH_NEED_BYTES)
        g_idx = 0;        
}

 

Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?

Share this post


Link to post
Share on other sites
Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?
Я, по крайней мере, считаю себя человеком:) И выбрал именно такое решение когда хочу отлаживать код, который выполняется в прерывании, к примеру. Вам предложил исходя именно из этих соображений.

Ну а человеческое использование printf, на мой взгляд, выводить с ее помощью информацию на терминал РС, если возможно.

Share this post


Link to post
Share on other sites
Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?
Многие выводят в реальный терминал :)

В 4х надо было в настройках линкера на вкладке output включить with runtime control modules и with io emulation modules. Под это отъедалась одна точка останова. Что в новых - понятия не имею. В доке должно быть написано.

Share this post


Link to post
Share on other sites

У меня почему-то отладка JetLink 5 работает очень плохо, через 2 раза.

 

Переменные часто не доступны. Когда пытаюсь идти по шагам -- перескакивает, пишет fail и перескакивает точку.

 

Когда пытаюсь просмотреть массив из 1-го совета -- там ничего не показывает -- пишет undefinite.

 

Зачем убрали возможность использовать printf -- не понятно.

Share this post


Link to post
Share on other sites
У меня почему-то отладка JetLink 5 работает очень плохо, через 2 раза.

...

Зачем убрали возможность использовать printf -- не понятно.

Не понимаю ....

В симуляторе нужен printf - один раз использовал, могу понять.

В реальном устройстве под отладкой нужен printf? Ну так направьте вывод на другое реальное устройство - дисплей, терминал, светодиод, в конце концов.

Да, JTAG в ARM7 часто и в самом деле танцы с бубном, но реальное устройство обычно какие-то интерфейсы имеет, почему туда чего-нить не подключить?

Share this post


Link to post
Share on other sites

В опциях general options -> library Configuration поставить Semihosted, в опциях С/C++ Compiler -> Preprocessor в дефайнах если прописано NDEBUG то стереть этот дефайн и должно все заработать через prinf, только имхо это тормоз редкий да и размер кода сразу возрастет :), лучше такую фичу самому прикрутить к уарту и смотереть тоже самое в терминалке.

Share this post


Link to post
Share on other sites
В опциях general options -> library Configuration поставить Semihosted, в опциях С/C++ Compiler -> Preprocessor в дефайнах если прописано NDEBUG то стереть этот дефайн и должно все заработать через prinf, только имхо это тормоз редкий да и размер кода сразу возрастет :), лучше такую фичу самому прикрутить к уарту и смотереть тоже самое в терминалке.

 

Странно, Semihosted и NDEBUG нет, но не работает. А смотреть нужно в IO Terminal? Или куда оно должно выводить?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this