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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Прошивка Flash и EEPROM одним файлом hex или elf
alexeyv
сообщение Jun 1 2015, 03:53
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



to demiurg_spb
Цитата
1. Во всех ваших примерах надо добавить &eeprom_var1...

Не во всех, а только в последнем - там действительно да, очепятка, сори.

Цитата
2. Лет 10 как никаких проблем с EEPROM нет, да и те, что были, вами лично надуманы. Единственное, что было это:
http://www.nongnu.org/avr-libc/user-manual...prom_corruption

Я и не уточнял возраст этой проблемы. Да, это было давно. Но в свое время я много времени думал почему CPU иногда косячит.
у меня было такое: адрес в EEPROM какой-то из диапазона 0x06...0x0А (не помню), и если по этому адресу записать то ли 0x27, то ли 0x2А (не помню), CPU вставал в ступор. причем зависал только на одном значении.

За исключением создания структуры, моя логика работы с EEPROM не отличается от логики других форумчан. Я не понимаю зачем создавать структуру?

Кстати, у ТС был вопрос как избавиться от второго файла, а не как работать с EEPROM.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 1 2015, 07:06
Сообщение #17


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(alexeyv @ Jun 1 2015, 06:53) *
Но в свое время я много времени думал почему CPU иногда косячит.
у меня было такое: адрес в EEPROM какой-то из диапазона 0x06...0x0А (не помню), и если по этому адресу записать то ли 0x27, то ли 0x2А (не помню), CPU вставал в ступор. причем зависал только на одном значении.
Приведите пожалуйста ссылку на ERRATA, где говорится о вашей ситуации.
Удивительно, но я начинал использование AVR с at90s2233 и с тех пор ничего подобного не встречал.

Цитата
За исключением создания структуры, моя логика работы с EEPROM не отличается от логики других форумчан. Я не понимаю зачем создавать структуру?
Я уже об этом писал и объяснил зачем это нужно делать ВСЕГДА. Хотите я вам скину ссылку на avg-gcc 4.X.X, который вдруг стал располагать данные в EEPROM в обратном порядке (формально это не бага, т.к. стандарт ничего против такого поведения не имеет)?
Если же данные поместить в упакованную структуру, то уже ничто не в праве её изменить.
Конечно, если вы не предоставляете доступа к EEPROM данным наружу и не считаете КС содержимого EEPROM можно обойтись и без структуры, только зачем?
Ведь вы и так делаете префикс для имени переменной из EEPROM, так почему бы не использовать специально созданный для таких случаев механизм?
Ещё один большой плюс структуры - это очень лаконичное её объявление как EXTERN - всего одной строчкой.

Цитата
Кстати, у ТС был вопрос как избавиться от второго файла, а не как работать с EEPROM.
Не зная алфавита сложно начать составлять слова...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Twin_by
сообщение Jun 1 2015, 07:57
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 3-09-11
Из: Минск
Пользователь №: 66 982



Цитата(demiurg_spb @ May 29 2015, 11:07) *
Задаёте значения своим переменным:
Код
EEMEM eeprom_data_t eeprom =
{
    .var1 = 33U,
    .var2 = 333.0f
};
Работаете с ними:

В этом случае будет создан файл *.eep. Я так подозреваю

Цитата(demiurg_spb @ Jun 1 2015, 10:06) *
Я уже об этом писал и объяснил зачем это нужно делать ВСЕГДА. Хотите я вам скину ссылку на avg-gcc 4.X.X, который вдруг стал располагать данные в EEPROM в обратном порядке (формально это не бага, т.к. стандарт ничего против такого поведения не имеет)?

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

Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jun 3 2015, 02:39
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
Я уже об этом писал и объяснил зачем это нужно делать ВСЕГДА.

У меня в проекте шесть различных независимых модулей, у каждого от одного до десятка байт конфигурации. Зачем мне их объединять в одну структуру?


Цитата
В этом случае будет создан файл *.eep. Я так подозреваю

Так и есть

Цитата
Да есть, такое. Когда первый раз с этим столкнулся долго не мог понять что у меня где в eeprom

поэтому я объявляю адреса EEPROM так:
Код
#define EE_ADR_VAR1       ((void*)0x11)

Всегда знаешь где что лежит, независимо от предпочтений компилятора
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 3 2015, 04:47
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alexeyv @ Jun 3 2015, 05:39) *
У меня в проекте шесть различных независимых модулей, у каждого от одного до десятка байт конфигурации. Зачем мне их объединять в одну структуру?
Чтобы после очередной смены версии компилятора или положения звезд на небе их расположение в памяти осталось неизменным. И обновление прошивки не приводило к необходимости повторной конфигурации.
Цитата(alexeyv @ Jun 3 2015, 05:39) *
поэтому я объявляю адреса EEPROM так:
Код
#define EE_ADR_VAR1       ((void*)0x11)

Всегда знаешь где что лежит, независимо от предпочтений компилятора
Взвалить на себя работу линкера? С ненулевой вероятностью положить одни данные поверх других? Нет уж, увольте.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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