|
Как ни странно, но работают только вариант с useFlash! При
использовании просто printf("hello world") происходит зависание
программы (проверял в железе и в эмуляторе).
Интересно так же следующее: после того, как отработал printf_P вызов
sprintf_P(buf, testbuf, 10); согласно отладчику через какое-то время
сваливается на начало предыдущей строки. Фактически, вместо sprintf_P
выполняется циклический запуск printf_P, тоже самое со строкой printf.
Похожие проблемы были с недостатком stack, но в данном случае всё,
вроде, должно работать...
Конфигурация:
DLIB, mega16 (128heap, 90 stack,1kb RAM, small)(optimization=OFF).
-----------------------
#include "ioavr.h"
#include "stdio.h"
#include "pgmspace.h"
#define useFlash
int (__writechar)(int Handle, unsigned char c)
{
if (Handle == 1 || Handle == 2)
return c+1;
else
return -1;
}
char buf[30];
void main(void){
#ifdef useFlash
static char __flash msg[]="hello world!";
static char __flash testbuf[]="Total %d bytes";
#else
static const char msg[]="hello world!";
#endif
#ifdef useFlash
printf_P(msg);
sprintf_P(buf, testbuf, 10);
puts(buf);
#else
printf("test");
printf(msg);
#endif
}
E-mail: info@telesys.ru