А вот и пример кода, который приводил к ошибке (ещё раз повторюсь - полагаю, что проблемы курса лечения).
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено dormouse 03 марта 2005 г. 19:04
В ответ на: Во времена Watcom C++ был код, при смене в котором порядка двух строк падал процесс компиляции. отправлено dormouse 03 марта 2005 г. 19:03

Как ни странно, но работают только вариант с 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