Jump to content

    
Sign in to follow this  
studert

printf в IAR

Recommended Posts

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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

Share this post


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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this