studert 0 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба Пересаживаюсь с GCC на IAR, пытаюсь printfом писать в УАРТ. Поискал по форуму, говорят что нужно переписать putchar, больше неичего не нашел. Переписал, вызов putchar работает, а printf нет... void usartPutchar(char c){ while(!(UCSR1A && (1<<UDRE1))); UDR1 = c; } int putchar(int c) { usartPutchar( c ); return c; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба Тогда уж лучше sprintf, писать в буфер, а буфер потом отправлять куда угодно. Иначе слишком долго придётся передавать по буковке... Хотя, если по времени не жмёт... По идее, если уарт настроен правильно, всё должно работать PS: не работает - это как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба Переписал, вызов putchar работает, а printf нет...А проект случайно не в С++ режиме компилится? Тогда надо перед putchar extern "C" написать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба Типичная проблема с printf в IAR на мелких контроллерах - нехватка стека. По умолчанию стандартный printf создает на стеке очень большой буфер, который не помещается в отведенную под стек область. Смотрите документацию на свой компилятор, как в нем задается, какую версию printf использовать. Для AVR есть еще одна проблема - в каком адресном пространстве располагать строку формата. В этом случае читайте про printf_P. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба return c; SUCCESS равен нулю вообще-то. не 0 - это код ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба 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 0 30 ноября, 2009 Опубликовано 30 ноября, 2009 · Жалоба 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 0 1 декабря, 2009 Опубликовано 1 декабря, 2009 · Жалоба Действительно стек переполнялся, надо было сразу в симуляторе прогнать. Всем спасибо, все заработало. Нужно внимательней подходить к вопросу размещения стека:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 1 декабря, 2009 Опубликовано 1 декабря, 2009 · Жалоба Нужно внимательней подходить к вопросу размещения стека:)И раскрывать в вопросе смысл термина "не работает" ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться