Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладка в Keil+RL-RTX
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
M&P
Hi, All!

Я использую связку Keil + RL-RTX (подобие RTOS от того же Keil), на базе NXP (LPC17xx).

Взял простейший пример RTX_ex1 и пытаюсь его запустить (пока что в симуляторе).

Возник очень непонятный вопрос. Я хочу поместить в свою программу отладочные сообщения, выдаваемые по UART. Но, если я подключаю к примеру stdio.h и ставлю где-то нечто вроде
printf("Hello world!\n");
то после попадания на эту строчку программа улетает в непонятное место в коде. В форумах читал, что вроде как нужно переопределять стандартные функции ввода-вывода в файле retarget.c, но как это сделать - непонятно. И зачем? Понимаю, что надо, но как работает механизм - непонятно.

Помогите пожалуйста, разобраться, что нужно сделать и как это вообще должно работать. Чувствую что все это достаточно несложно, но в концепцию не врубаюсь smile.gif

Второй вопрос: вроде бы можно сделать вывод отладочных сообщений прямо через JTAG (т.к. в Keil MDK присутствует окно View->Serial Windows->Debug (printf) Viewer. Так ли это? И как это использовать? В чем различие в использовании по сравнению с использованием UART?

Всем заранее спасибо!

P.S. документ RL-ARM Real-Time Library User's Guide by Keil, к сожалению скуп, на объяснения по этим вопросам.
M&P
Цитата
Второй вопрос: вроде бы можно сделать вывод отладочных сообщений прямо через JTAG (т.к. в Keil MDK присутствует окно View->Serial Windows->Debug (printf) Viewer. Так ли это? И как это использовать? В чем различие в использовании по сравнению с использованием UART?

Вдумчивое чтение документации показало, что такая функциональность действительно присутствует. Это называется Serial Wire Viewer (SWV), и работает только через Serial Wire Debug port (SWD). Через JTAG НЕ РАБОТАЕТ. К сожалению, мои MT-link'и SWD не поддерживают sad.gif

Вопрос по поводу printf debugging через UART остается актуальным.
M&P
Разобрался с retarget.

Для того, чтобы работала функция printf, нужно

1) подключить stdio.h
2) переопределить в retarget.c функцию
int sendchar(int ch);
которая используется функцией printf. В ней нужно прописать вывод 1 (одного) символа в нужный нам UART.
3) profit! работает.

Пока что непонятно кое-что - в одних форумах советуют переопределять функцию sendchar, во вторых - putchar, в третьих putc - неужели это совсем без разницы?

позже выложу ссылки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.