[an error occurred while processing this directive]
Знатокам IAR для AVR: Как указать автоматическую переменную во флеше (или делаем лог менее прожорливым) (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Kosha 29 октября 2006 г. 23:47

Приветствую глубокоуважаемый All!

Проблема следующая: в коде понапиханы конструкции типа:
LOG("Foo() failed. Error:%d",cErr);

При этом LOG в общем случае
#define LOG printf

В частном - своя функция с множественными параметрами.

Собственно имеем проблему массового пожирания оперативки каждой такой строчкой.

Задача - сделать чтобы это все грузилось из флеша.

Но как - в упор не пойму.
Аргумент макроса - по определению автоматическая переменная.
Т.е. нельзя написать:
#define LOGF(string) \
{\
__flash char *str = string;\
LOG(str);\
}

Компилер ругается, что автоматическим переменным и параметрам функции эти спецификаторы прикручивать нельзя.

Ладно, пользуемся #pragma dataseg=CODE.
Компиляется, но внутри макроса работать не хочет (не понимает препроцессор, что эту прагму надо в макросе запихнуть.

Вопрос - у кого-нибудь есть идеи, что еще можно сделать? :-)

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание