реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> printf в IAR, что нужно прописать
studert
сообщение Nov 30 2009, 11:51
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Пересаживаюсь с 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;
}
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 30 2009, 12:12
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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

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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 30 2009, 12:43
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(studert @ Nov 30 2009, 13:51) *
Переписал, вызов putchar работает, а printf нет...
А проект случайно не в С++ режиме компилится? Тогда надо перед putchar extern "C" написать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vmp
сообщение Nov 30 2009, 13:47
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Типичная проблема с printf в IAR на мелких контроллерах - нехватка стека. По умолчанию стандартный printf создает на стеке очень большой буфер, который не помещается в отведенную под стек область. Смотрите документацию на свой компилятор, как в нем задается, какую версию printf использовать. Для AVR есть еще одна проблема - в каком адресном пространстве располагать строку формата. В этом случае читайте про printf_P.
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 30 2009, 17:24
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(studert @ Nov 30 2009, 13:51) *
return c;

SUCCESS равен нулю вообще-то.
не 0 - это код ошибки.
Go to the top of the page
 
+Quote Post
vmp
сообщение Nov 30 2009, 18:28
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(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.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 30 2009, 22:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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.
Go to the top of the page
 
+Quote Post
studert
сообщение Dec 1 2009, 04:17
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Действительно стек переполнялся, надо было сразу в симуляторе прогнать. Всем спасибо, все заработало. Нужно внимательней подходить к вопросу размещения стекаsmile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 1 2009, 08:20
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(studert @ Dec 1 2009, 06:17) *
Нужно внимательней подходить к вопросу размещения стекаsmile.gif
И раскрывать в вопросе смысл термина "не работает" wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016