Перейти к содержанию
    

IAR и EEPROM

Возник такой вопрос.

 

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

 

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

 

вначале пробовал писать так, получается как я понял иар перед выполнением функции майн инициализируется, из флеш памяти дублирует в еепром память

unsigned char __eeprom ipaddr_gate_eeprom[4]  = {192,168,  0,  2};

 

 

потом убрал данные, в итоге инициализация осталась но в еепром памяти логично стали "0"

unsigned char __eeprom ipaddr_gate_eeprom[4];

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__no_init unsigned char __eeprom ipaddr_gate_eeprom[4];

 

И запрограммировать фуз EESAVE

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возник такой вопрос.

 

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

 

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

 

вначале пробовал писать так, получается как я понял иар перед выполнением функции майн инициализируется, из флеш памяти дублирует в еепром память

unsigned char __eeprom ipaddr_gate_eeprom[4]  = {192,168,  0,  2};

 

 

потом убрал данные, в итоге инициализация осталась но в еепром памяти логично стали "0"

unsigned char __eeprom ipaddr_gate_eeprom[4];

 

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

 

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

вопрос поставлен расплывчато. вообще, память EEPROM является энергонезависимой и предназначена как раз для хранения значений при потере питания, перезагрузках и прочих сбоях. Для того, чтобы воспользоваться этой ее функцией, достаточно просто записать значение в ячейку памяти. Другой вопрос, что будет происходить с этой памятью при стирании чипа (перепрошивке FLASH) - этим управляет фьюз EESAVE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IAR не инициализирует ЕЕПРОМ run time! Перезагрузка никак на инициализируемые переменные не влияет. Просто при сборке будет создан дополнительный выходной файл (hex и т. д.) с данными для прошивки в ЕЕПРОМ при указании соответствующих опций линкеру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эээ, я так понял, что автору надо именно место зарезервировать в EEPROM, чтобы в хекс-файле не было данных инициализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to Rst7, именно это и требуется

 

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

 

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

 

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

Изменено пользователем west329_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to Rst7, именно это и требуется

 

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

 

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

 

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

ну тогда пишите __no_init __eeprom и все. суть вопроса до сих пор непонятна

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эээ, я так понял, что автору надо именно место зарезервировать в EEPROM, чтобы в хекс-файле не было данных инициализации.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну я так понимаю, что некоторые данные в епром при прошивке новой ревизии надо оставить старыми, некоторые - обновить. Хотя, конечно, это мы тут телепатию проявляем. Постановка вопроса не очень корректна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю за помощь, теперь всё понятно.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю за помощь, теперь всё понятно.

 

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

это зависит от того, что Вам надо делать с этими данными. EEPROM энергонезависим, но работает заметно медленнее и имеет ограниченное число циклов стирания-записи

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это зависит от того, что Вам надо делать с этими данными. EEPROM энергонезависим, но работает заметно медленнее и имеет ограниченное число циклов стирания-записи

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...