Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR и EEPROM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
west329_
Возник такой вопрос.

Еепром память планирую использоать для хранения корректирующих данных.

Подскажите как иар проводит инициализацию этой памяти, а точнее не будит ли он затирать её при перезагрузке контроллера

вначале пробовал писать так, получается как я понял иар перед выполнением функции майн инициализируется, из флеш памяти дублирует в еепром память
Код
unsigned char __eeprom ipaddr_gate_eeprom[4]  = {192,168,  0,  2};



потом убрал данные, в итоге инициализация осталась но в еепром памяти логично стали "0"
Код
unsigned char __eeprom ipaddr_gate_eeprom[4];


мне нужно что данные после перезагрузки не инициализироваль в еепром а оставались от предыдущего сеанса работы контроллера, для этихже целей нужна еепром

подскажите как правильней это сделать, не прибегая к собственным функциям
Rst7
Код
__no_init unsigned char __eeprom ipaddr_gate_eeprom[4];


И запрограммировать фуз EESAVE
sergik_vrn
Цитата(west329_ @ Jan 19 2009, 14:56) *
Возник такой вопрос.

Еепром память планирую использоать для хранения корректирующих данных.

Подскажите как иар проводит инициализацию этой памяти, а точнее не будит ли он затирать её при перезагрузке контроллера

вначале пробовал писать так, получается как я понял иар перед выполнением функции майн инициализируется, из флеш памяти дублирует в еепром память
Код
unsigned char __eeprom ipaddr_gate_eeprom[4]  = {192,168,  0,  2};



потом убрал данные, в итоге инициализация осталась но в еепром памяти логично стали "0"
Код
unsigned char __eeprom ipaddr_gate_eeprom[4];


мне нужно что данные после перезагрузки не инициализироваль в еепром а оставались от предыдущего сеанса работы контроллера, для этихже целей нужна еепром

подскажите как правильней это сделать, не прибегая к собственным функциям

вопрос поставлен расплывчато. вообще, память EEPROM является энергонезависимой и предназначена как раз для хранения значений при потере питания, перезагрузках и прочих сбоях. Для того, чтобы воспользоваться этой ее функцией, достаточно просто записать значение в ячейку памяти. Другой вопрос, что будет происходить с этой памятью при стирании чипа (перепрошивке FLASH) - этим управляет фьюз EESAVE.
IgorKossak
IAR не инициализирует ЕЕПРОМ run time! Перезагрузка никак на инициализируемые переменные не влияет. Просто при сборке будет создан дополнительный выходной файл (hex и т. д.) с данными для прошивки в ЕЕПРОМ при указании соответствующих опций линкеру.
Rst7
Эээ, я так понял, что автору надо именно место зарезервировать в EEPROM, чтобы в хекс-файле не было данных инициализации.
west329_
to Rst7, именно это и требуется

Нужен тогда __no_init или без него.

В начале при включении питания просто получаю данные из еепром переменных, прогоняю их через сrс и сравниваю с сrс которое хранится в том же еепром, со стороны С компилятора разницы никакой что срам что епром сравниваеш. Хочется простоты и нехочется помнить по камим адресам в еепром всё это хранится пусть этим компилятор занимается.

В противном случае если ошибка данных сигнализация.
sergik_vrn
Цитата(west329_ @ Jan 19 2009, 16:25) *
to Rst7, именно это и требуется

Нужен тогда __no_init или без него.

В начале при включении питания просто получаю данные из еепром переменных, прогоняю их через сrс и сравниваю с сrс которое хранится в том же еепром, со стороны С компилятора разницы никакой что срам что епром сравниваеш. Хочется простоты и нехочется помнить по камим адресам в еепром всё это хранится пусть этим компилятор занимается.

В противном случае если ошибка данных сигнализация.

ну тогда пишите __no_init __eeprom и все. суть вопроса до сих пор непонятна
IgorKossak
Цитата(Rst7 @ Jan 19 2009, 15:19) *
Эээ, я так понял, что автору надо именно место зарезервировать в EEPROM, чтобы в хекс-файле не было данных инициализации.

Тогда о каких данных инициализации идёт речь? Инициализаторов во flash памяти в любом случае не будет. Инициализаторы (и соответствующие процедуры копирования\обнуления) имеют место только при инициализации ОЗУ. Инициализация же ЕЕПРОМ осуществляется только на этапе прошивки отдельным файлом. Если же речь идёт о резервировании места под переменные в ЕЕПРОМ, то место будет зарезервировано независимо от того, инициализируются переменные или нет.
Rst7
Ну я так понимаю, что некоторые данные в епром при прошивке новой ревизии надо оставить старыми, некоторые - обновить. Хотя, конечно, это мы тут телепатию проявляем. Постановка вопроса не очень корректна.
west329_
Благодарю за помощь, теперь всё понятно.

Подскажите а как правильней использовать еепром память, я вижу 2 варианта первый во время работы непосредственно брать данные с еепром и второй в начале программы поместить данные с еепром в озу, а дальше работать с озу ?
sergik_vrn
Цитата(west329_ @ Jan 20 2009, 14:08) *
Благодарю за помощь, теперь всё понятно.

Подскажите а как правильней использовать еепром память, я вижу 2 варианта первый во время работы непосредственно брать данные с еепром и второй в начале программы поместить данные с еепром в озу, а дальше работать с озу ?

это зависит от того, что Вам надо делать с этими данными. EEPROM энергонезависим, но работает заметно медленнее и имеет ограниченное число циклов стирания-записи
VladimirYU
Цитата(sergik_vrn @ Jan 20 2009, 14:12) *
это зависит от того, что Вам надо делать с этими данными. EEPROM энергонезависим, но работает заметно медленнее и имеет ограниченное число циклов стирания-записи

В дополнение. Рекомендуется, для сохранения ресурса, перед операцией записи выполнять сравнение уже хранящегося значения с записываемым и производить запись только если они отличаются.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.