Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: printf в IAR 5.5
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
dkukushkin
Для удобства хочется видеть под отладчиком что печатается с помощью 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 дня бьюсь...
Dog Pawlowa
Цитата(dkukushkin @ May 14 2010, 10:20) *
Как увидеть что выводится с помощью printf?

Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками.
dkukushkin
Цитата(Dog Pawlowa @ May 14 2010, 12:08) *
Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками.


Ага. Особенно удобно текст сообщения по 1-й букве читать. То что читалось бы за минуту -- нужно будет целый день по букве читать. Это же все для удобства и экономии времени делается. Должно же быть решение?
prottoss
Цитата(dkukushkin @ May 14 2010, 14:20) *
Для удобства хочется видеть под отладчиком что печатается с помощью 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;        
}
dkukushkin
Цитата(prottoss @ May 14 2010, 12:14) *
Код
...
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?
prottoss
Цитата(dkukushkin @ May 14 2010, 16:24) *
Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?
Я, по крайней мере, считаю себя человекомsmile.gif И выбрал именно такое решение когда хочу отлаживать код, который выполняется в прерывании, к примеру. Вам предложил исходя именно из этих соображений.
Ну а человеческое использование printf, на мой взгляд, выводить с ее помощью информацию на терминал РС, если возможно.
Сергей Борщ
Цитата(dkukushkin @ May 14 2010, 12:24) *
Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?
Многие выводят в реальный терминал smile.gif
В 4х надо было в настройках линкера на вкладке output включить with runtime control modules и with io emulation modules. Под это отъедалась одна точка останова. Что в новых - понятия не имею. В доке должно быть написано.
dkukushkin
У меня почему-то отладка JetLink 5 работает очень плохо, через 2 раза.

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

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

Зачем убрали возможность использовать printf -- не понятно.
Dog Pawlowa
Цитата(dkukushkin @ May 14 2010, 21:01) *
У меня почему-то отладка JetLink 5 работает очень плохо, через 2 раза.
...
Зачем убрали возможность использовать printf -- не понятно.

Не понимаю ....
В симуляторе нужен printf - один раз использовал, могу понять.
В реальном устройстве под отладкой нужен printf? Ну так направьте вывод на другое реальное устройство - дисплей, терминал, светодиод, в конце концов.
Да, JTAG в ARM7 часто и в самом деле танцы с бубном, но реальное устройство обычно какие-то интерфейсы имеет, почему туда чего-нить не подключить?
MALLOY2
В опциях general options -> library Configuration поставить Semihosted, в опциях С/C++ Compiler -> Preprocessor в дефайнах если прописано NDEBUG то стереть этот дефайн и должно все заработать через prinf, только имхо это тормоз редкий да и размер кода сразу возрастет smile.gif, лучше такую фичу самому прикрутить к уарту и смотереть тоже самое в терминалке.
dkukushkin
Цитата(MALLOY2 @ May 15 2010, 16:13) *
В опциях general options -> library Configuration поставить Semihosted, в опциях С/C++ Compiler -> Preprocessor в дефайнах если прописано NDEBUG то стереть этот дефайн и должно все заработать через prinf, только имхо это тормоз редкий да и размер кода сразу возрастет smile.gif, лучше такую фичу самому прикрутить к уарту и смотереть тоже самое в терминалке.


Странно, Semihosted и NDEBUG нет, но не работает. А смотреть нужно в IO Terminal? Или куда оно должно выводить?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.