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

printf в IAR 5.5

Для удобства хочется видеть под отладчиком что печатается с помощью 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 дня бьюсь...

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


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

Как увидеть что выводится с помощью printf?

Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками.

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


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

Напишите свою пустышку putchar, поставьте там точку останова и смотрите побайтно глазками.

 

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

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


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

Для удобства хочется видеть под отладчиком что печатается с помощью 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;        
}

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


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

...
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?

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


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

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

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

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


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

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

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

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


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

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

 

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

 

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

 

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

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


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

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

...

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

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

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

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

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

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


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

Гость MALLOY2

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

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


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

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

 

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

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


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

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

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

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

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

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

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

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

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

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