dkukushkin 0 Posted May 14, 2010 · Report post Для удобства хочется видеть под отладчиком что печатается с помощью 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 дня бьюсь... Quote Ответить с цитированием Share this post Link to post Share on other sites
DogPawlowa 0 Posted May 14, 2010 · Report post Как увидеть что выводится с помощью printf? Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками. Quote Ответить с цитированием Share this post Link to post Share on other sites
dkukushkin 0 Posted May 14, 2010 · Report post Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками. Ага. Особенно удобно текст сообщения по 1-й букве читать. То что читалось бы за минуту -- нужно будет целый день по букве читать. Это же все для удобства и экономии времени делается. Должно же быть решение? Quote Ответить с цитированием Share this post Link to post Share on other sites
prottoss 0 Posted May 14, 2010 · Report post Для удобства хочется видеть под отладчиком что печатается с помощью 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; } Quote Ответить с цитированием Share this post Link to post Share on other sites
dkukushkin 0 Posted May 14, 2010 · Report post ... 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? Quote Ответить с цитированием Share this post Link to post Share on other sites
prottoss 0 Posted May 14, 2010 · Report post Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?Я, по крайней мере, считаю себя человеком:) И выбрал именно такое решение когда хочу отлаживать код, который выполняется в прерывании, к примеру. Вам предложил исходя именно из этих соображений. Ну а человеческое использование printf, на мой взгляд, выводить с ее помощью информацию на терминал РС, если возможно. Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted May 14, 2010 · Report post Это все так делают? Или существует человеческое решение видеть все на экране IO Terminal?Многие выводят в реальный терминал :) В 4х надо было в настройках линкера на вкладке output включить with runtime control modules и with io emulation modules. Под это отъедалась одна точка останова. Что в новых - понятия не имею. В доке должно быть написано. Quote Ответить с цитированием Share this post Link to post Share on other sites
dkukushkin 0 Posted May 14, 2010 · Report post У меня почему-то отладка JetLink 5 работает очень плохо, через 2 раза. Переменные часто не доступны. Когда пытаюсь идти по шагам -- перескакивает, пишет fail и перескакивает точку. Когда пытаюсь просмотреть массив из 1-го совета -- там ничего не показывает -- пишет undefinite. Зачем убрали возможность использовать printf -- не понятно. Quote Ответить с цитированием Share this post Link to post Share on other sites
DogPawlowa 0 Posted May 15, 2010 · Report post У меня почему-то отладка JetLink 5 работает очень плохо, через 2 раза. ... Зачем убрали возможность использовать printf -- не понятно. Не понимаю .... В симуляторе нужен printf - один раз использовал, могу понять. В реальном устройстве под отладкой нужен printf? Ну так направьте вывод на другое реальное устройство - дисплей, терминал, светодиод, в конце концов. Да, JTAG в ARM7 часто и в самом деле танцы с бубном, но реальное устройство обычно какие-то интерфейсы имеет, почему туда чего-нить не подключить? Quote Ответить с цитированием Share this post Link to post Share on other sites
MALLOY2 0 Posted May 15, 2010 · Report post В опциях general options -> library Configuration поставить Semihosted, в опциях С/C++ Compiler -> Preprocessor в дефайнах если прописано NDEBUG то стереть этот дефайн и должно все заработать через prinf, только имхо это тормоз редкий да и размер кода сразу возрастет :), лучше такую фичу самому прикрутить к уарту и смотереть тоже самое в терминалке. Quote Ответить с цитированием Share this post Link to post Share on other sites
dkukushkin 0 Posted May 18, 2010 · Report post В опциях general options -> library Configuration поставить Semihosted, в опциях С/C++ Compiler -> Preprocessor в дефайнах если прописано NDEBUG то стереть этот дефайн и должно все заработать через prinf, только имхо это тормоз редкий да и размер кода сразу возрастет :), лучше такую фичу самому прикрутить к уарту и смотереть тоже самое в терминалке. Странно, Semihosted и NDEBUG нет, но не работает. А смотреть нужно в IO Terminal? Или куда оно должно выводить? Quote Ответить с цитированием Share this post Link to post Share on other sites