Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: printf в IAR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
studert
Пересаживаюсь с GCC на IAR, пытаюсь printfом писать в УАРТ. Поискал по форуму, говорят что нужно переписать putchar, больше неичего не нашел. Переписал, вызов putchar работает, а printf нет...

CODE
void usartPutchar(char c){
while(!(UCSR1A && (1<<UDRE1)));
UDR1 = c;
}

int putchar(int c) {
usartPutchar( c );
return c;
}
MrYuran
Тогда уж лучше sprintf, писать в буфер, а буфер потом отправлять куда угодно.
Иначе слишком долго придётся передавать по буковке...
Хотя, если по времени не жмёт...
По идее, если уарт настроен правильно, всё должно работать

PS: не работает - это как?
Сергей Борщ
Цитата(studert @ Nov 30 2009, 13:51) *
Переписал, вызов putchar работает, а printf нет...
А проект случайно не в С++ режиме компилится? Тогда надо перед putchar extern "C" написать.
vmp
Типичная проблема с printf в IAR на мелких контроллерах - нехватка стека. По умолчанию стандартный printf создает на стеке очень большой буфер, который не помещается в отведенную под стек область. Смотрите документацию на свой компилятор, как в нем задается, какую версию printf использовать. Для AVR есть еще одна проблема - в каком адресном пространстве располагать строку формата. В этом случае читайте про printf_P.
defunct
Цитата(studert @ Nov 30 2009, 13:51) *
return c;

SUCCESS равен нулю вообще-то.
не 0 - это код ошибки.
vmp
Цитата(defunct @ Nov 30 2009, 20:24) *
SUCCESS равен нулю вообще-то.
не 0 - это код ошибки.

Хелпа по ИАРу под рукой не оказалось.
Из MSDN:
Цитата
Return Values
Each function returns the character written.
To indicate an error or end-of-file condition, putchar returns EOF; putwchar returns WEOF.
rezident
Цитата(defunct @ Nov 30 2009, 22:24) *
SUCCESS равен нулю вообще-то.
не 0 - это код ошибки.

Вообще-то нет. У автора все верно. Цитата из ISO/IEC 9899:1999 (E) (в простонародии C99)
Цитата
7.19.7.9 The putchar function
Synopsis
1 #include <stdio.h>
int putchar(int c);
Description
2The putchar function is equivalent to putc with the second argument stdout.
Returns
3The putchar function returns the character written.If a write error occurs, the error
indicator for the stream is set and putchar returns EOF.
studert
Действительно стек переполнялся, надо было сразу в симуляторе прогнать. Всем спасибо, все заработало. Нужно внимательней подходить к вопросу размещения стекаsmile.gif
Сергей Борщ
Цитата(studert @ Dec 1 2009, 06:17) *
Нужно внимательней подходить к вопросу размещения стекаsmile.gif
И раскрывать в вопросе смысл термина "не работает" wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.