Необходимо инициализировать время в 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" ?