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

 
 
> Как приручить scanf ?, Пересброс мк
alux
сообщение Jul 26 2007, 07:57
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Необходимо инициализировать время в DS1388 (часы реального времени). В прилагаемом апноте это реализовано при помощи printf/scanf:
Код
printf("\nEnter the year (0-99): ");
scanf("%bx", &yr);
.......

Чтобы не забивать ОЗУ применил --string_literals_in_flash и добавил суффиксы _P в функции printf/scanf.
С printf_P все работает , а вот при попытке вставить scanf_P происходит переполнение стека. Увеличение CSTACK, RSTACK не спасает положения. Думаю что scanf("%bx", &yr); создает копию строки в ОЗУ. Или я ошибаюсь? Переменная yr - глобальная. Странное и то, что отдельно ds1388.c с функциями scanf_P при компиляции показывает:
Цитата
1 356 bytes of CODE memory (+ 6 bytes shared)
8 bytes of DATA memory

Т.е. ОЗУ не занято. Слышал, что вместо scanf можно использовать frmrd.c с необходимыми параметрами.
Если подключить к проекту frmrd.c , как компилятор разберется откуда использовать функцию scanf ?
И напоследок пару вопросов по сути не относящихся:
1) Что за модификатор формата "%bx" ?
2) Откуда берется переменная RI в функции disp_clk_regs ?
Апнот для ds1388 прилагаю.
Спасибо.
P.S. Может "%bx" - это банальная очепятка и должно быть "%dx" ?
Прикрепленные файлы
Прикрепленный файл  3482Fig01.zip ( 6.5 килобайт ) Кол-во скачиваний: 56
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jul 26 2007, 15:18
Сообщение #2


Гуру
******

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



Про scanf не знаю, никогда не использовал, а printf и sprintf в IAR требуют иногда до 1,5кБ стековой памяти. Причем ошибки переполнения стека компилятор не выдает. Поэтому на мелких контроллерах применять их не имеет смысла.
Go to the top of the page
 
+Quote Post
alux
сообщение Jul 26 2007, 15:29
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



to rezident Вы наверно не внимательно читали мой вопрос. Я использую printf_P. С этим проблем нет. Проблема с scanf_P. Как верно подметил spf , можно сделать через sscanf. Вопрос только как? И что за модификатор такой "%bx" ?
Go to the top of the page
 
+Quote Post
spf
сообщение Jul 26 2007, 16:30
Сообщение #4


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(alux @ Jul 26 2007, 21:29) *
Как верно подметил spf , можно сделать через sscanf. Вопрос только как? И что за модификатор такой "%bx" ?

Руками smile.gif
То, что надо обработать считывается в буфер(стороку), потом указатель на это буфер передается первым параметром sscanf'у.

"%bx" опечатка или расширение компилятора.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:45
Рейтинг@Mail.ru


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