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

printf в IAR

Пересаживаюсь с GCC на IAR, пытаюсь printfом писать в УАРТ. Поискал по форуму, говорят что нужно переписать putchar, больше неичего не нашел. Переписал, вызов putchar работает, а printf нет...

 

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

int putchar(int c) {
usartPutchar( c );
   return c;
}

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


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

Тогда уж лучше sprintf, писать в буфер, а буфер потом отправлять куда угодно.

Иначе слишком долго придётся передавать по буковке...

Хотя, если по времени не жмёт...

По идее, если уарт настроен правильно, всё должно работать

 

PS: не работает - это как?

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


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

Переписал, вызов putchar работает, а printf нет...
А проект случайно не в С++ режиме компилится? Тогда надо перед putchar extern "C" написать.

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


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

Типичная проблема с printf в IAR на мелких контроллерах - нехватка стека. По умолчанию стандартный printf создает на стеке очень большой буфер, который не помещается в отведенную под стек область. Смотрите документацию на свой компилятор, как в нем задается, какую версию printf использовать. Для AVR есть еще одна проблема - в каком адресном пространстве располагать строку формата. В этом случае читайте про printf_P.

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


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

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.

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


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

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.

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


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

Действительно стек переполнялся, надо было сразу в симуляторе прогнать. Всем спасибо, все заработало. Нужно внимательней подходить к вопросу размещения стека:)

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


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

Нужно внимательней подходить к вопросу размещения стека:)
И раскрывать в вопросе смысл термина "не работает" ;)

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


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

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

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

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

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

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

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

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

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

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