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

 
 
> WINAVR: pgmspace, eeprom, отражаем актуальные проблемы
_Pasha
сообщение Apr 8 2008, 18:50
Сообщение #1


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Предлагаю в этой ветке отражать передовые методы работы с pgmspace.h и eeprom.h
Может, потом закрепить тему. Тем более, что видны динамичные изменения в этой области.

Для начала. WINAVR-20071221 + Avr Studio 4.13 sp2 build 571

Делаю большой проект. Выложить не могу. Вкратце суть проблемы.
Использую хедер, в котором сведены вместе все параметры, хранящиеся в EEPROM
paramset.h
Код
#ifndef PARAMSET_H
#define PARAMSET_H 1
EEMEM uint16_t nominal_rpm = 500;
EEMEM uint8_t amplitude = 208;
................... etc
#endif


Хедер включается в разные модули. Их много. Везде константы из еепрома пользуются популярностью smile.gif
И, BTW, надо иметь на выходе файл *.eep для начальной заливки.

Для того, чтобы все работало, приходится объявлять параметры дважды - в основном модуле с инициализацией, а в остальных - как extern, т.е.
Код
#ifndef PARAMSET_H
#define PARAMSET_H 1
#ifdef _IN_MAIN_
EEMEM uint16_t nominal_rpm = 500;
EEMEM uint8_t amplitude = 208;
................... etc
#else
extern EEMEM uint16_t nominal_rpm;
extern EEMEM uint8_t amplitude;
................... etc
#endif

#endif


Потом, в основной программе
Код
#define _IN_MAIN_ 1
#include "paramset.h"


Иначе - чушь в распределении адресов.
Как избежать двойного объявления переменных в приведенном примере, ессно, без использования макросов?
Возможно ли это вообще?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:11
Рейтинг@Mail.ru


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