|
Зависания на printf, нужен форматированный вывод в DBGU |
|
|
|
Jul 5 2010, 07:08
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Процессор SAM7X512, IAR 5.4. В проекте используются порты COM0, COM1, PIT, TWI. Основой для проекта был пример из IAR "basic-usart-hw-handshaking-project". Приём в порты COM0, COM1 сделан через регистры побайтно, вывод - через DMA. Нужно для вывода отладочного лога в DBGU форматированный вывод. При инициализации DBGU: Код PIO_Configure (DBGU_pins, PIO_LISTSIZE(DBGU_pins)); DBGU_Configure (DBGU_STANDARD, 115200, BOARD_MCK); и попытке вывести любую строку при помощи Код printf("TEST"); процессор зависает. То же самое при выводе с помощью Код TRACE_INFO("TEST"); и соответствующей инициализацией из trace.c порта DBGU. При этом в порт ничего не попадает. А вот Код DBGU_PutChar(byte); работает прекрасно. Куда смотреть?
--------------------
Руслан
|
|
|
|
|
Jul 5 2010, 08:02
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Ошибочка вышла - если выводим только текст, не виснет. Так виснет: Код printf("-- TEST --\n\r"); а так - нет, но в порт ничего не выводится: Код printf("-- TEST --"); Цитата(jorikdima @ Jul 5 2010, 13:40)  В размер стэка смотреть. Перво-наперво попробовать увеличить. Если можно, для чайников - где он изменяется?
--------------------
Руслан
|
|
|
|
|
Jul 15 2010, 05:44
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Попробуйте так Код char format_buff[512]; //Сюда будет копироваться отформатированная строка
void out_fdbg(const char *args, ...) { u32_t len; va_list ap; va_start(ap, args); len = vsprintf(format_buff,args,ap); va_end(ap); Uart1_SendData(format_buff,len); }
|
|
|
|
|
Jul 15 2010, 06:06
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Цитата(MALLOY2 @ Jul 15 2010, 11:44)  Попробуйте так Код char format_buff[512]; //Сюда будет копироваться отформатированная строка
void out_fdbg(const char *args, ...) { u32_t len; va_list ap; va_start(ap, args); len = vsprintf(format_buff,args,ap); va_end(ap); Uart1_SendData(format_buff,len); } IAR ругается на va_list, va_start, va_end. Где они лежат не понял  Что кроме stdio.h нужно инклюдить?
--------------------
Руслан
|
|
|
|
|
Jul 15 2010, 07:47
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата #include <stdarg.h> Смотрите, размер format_buff полностью на вашей ответственности, если результирующая строка не влезет в него сами виноваты.
|
|
|
|
|
Jul 15 2010, 08:15
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Цитата(MALLOY2 @ Jul 15 2010, 13:47)  Смотрите, размер format_buff полностью на вашей ответственности, если результирующая строка не влезет в него сами виноваты. это понятно так и не понял как пользоваться что такое args и ap в вашем коде?
--------------------
Руслан
|
|
|
|
|
Jul 15 2010, 09:45
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Код void DBGU_fprint(const char *args, ...) { char format_buff[512]; //Сюда будет копироваться отформатированная строка unsigned short int len,i_len; va_list ap; va_start(ap, args); len = vsprintf(format_buff, args, ap); va_end(ap); for (i_len=0; i_len < len; i_len++) DBGU_PutChar(format_buff[i_len]); }
... // Вызов: DBGU_fprint("TEST\n"); Во, заработало!! Спасибо Пока этот вариант более чем устраивает
Сообщение отредактировал athlon64 - Jul 15 2010, 10:09
--------------------
Руслан
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|