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

 
 
> Прошивка Flash и EEPROM одним файлом hex или elf
Twin_by
сообщение May 25 2015, 05:26
Сообщение #1


Участник
*

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



Здравствуйте!
У меня такая вот ситуация. Подключаю библиотеку eeprom.h. Инициализирую переменную в eeprom памяти строчкой uint8_t var EEMEM = 15; . После сборки создается файл с расширением eep который заливается в МК отдельно. Интересен такой вопрос можно ли прошить flash и eeprom память avr используя только один файл hex или elf? Как это сделать: что добавить, что убрать? От библиотеки eeprom.h не хотелось бы отказываться (хорошая библиотека, удобная)

Сообщение отредактировал Twin_by - May 25 2015, 09:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение May 29 2015, 02:19
Сообщение #2


Местный
***

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



Цитата
Если я правильно понял ваш код, то вы в нем сами присваиваете адрес ячейки в eeprom где будет хранится значение переменной? Т.е использовать директиву EEMEM (для автоматического присвоения адреса) не получится


Почему же, получится! можете использовать и EEMEM
Код
unsigned char eeprom_var1            EEMEM;
......
eeprom_write_byte(eeprom_var1,DEFAUT_VALUE);
.....
val1 = eeprom_read_byte(eeprom_var1);


Просто я уже привык определять адреса таким образом. При отладке знаешь где посмотреть переменную, не надо лазить по map-файлам. Да и раньше у Atmel'a был один косячок с EEPROM - при расположении переменных по каким-то адресам в EEPROM МК входил в ступор (его победили, но привычка осталась)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 29 2015, 08:07
Сообщение #3


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

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



Цитата(alexeyv @ May 29 2015, 05:19) *
Код
val1 = eeprom_read_byte(eeprom_var1);
1. Во всех ваших примерах надо добавить &eeprom_var1...
2. Лет 10 как никаких проблем с EEPROM нет, да и те, что были, вами лично надуманы. Единственное, что было это:
http://www.nongnu.org/avr-libc/user-manual...prom_corruption

А привычка у вас плохая осталась - компилятор не проверяет типизацию при обращении к данным.
Возникает дополнительный шанс совершить ошибку.
3. Вообще с eeprom правильно работать следующим образом:
Через typedef определяете структуру, содержащую все данные из EEPROM:
Код
typedef struct
{
    uint8_t   __dummy; // don't use zero address
    uint8_t   var1;
    float       var2;
    ...
} eeprom_data_t;
Задаёте значения своим переменным:
Код
EEMEM eeprom_data_t eeprom =
{
    .var1 = 33U,
    .var2 = 333.0f
};
Работаете с ними:
Код
extern EEMEM eeprom_data_t eeprom;
uint8_t x = eeprom_read_byte(&eeprom.var1);
...
eeprom_update_byte(&eeprom.var1, x);

float f = eeprom_read_float(&eeprom.var2);
...
eeprom_update_float(&eeprom.var2, f);
В таком случае вы дополнительно обеспечиваете гарантию неизменности задуманной вами очерёдности данных в EEPROM,
независимо от версий и причуд компилятора (хорошо бы, конечно, использовать ещё и атрибут __packed, но для вводного курса этого и так достаточно).
Также, благодаря update вместо write вы упрощаете пользовательское приложение и подливаете срок службы EEPROM.
Урок окончен)))


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
qwerty1023
сообщение May 29 2015, 08:47
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 9-04-14
Пользователь №: 81 295



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


Урок окончен)))


А в какой момент и как это происходит?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 29 2015, 08:52
Сообщение #5


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

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



Цитата(qwerty1023 @ May 29 2015, 11:47) *
А в какой момент и как это происходит?
После сборки проекта вы получаете секцию с ЕЕПРОМ переменными в elf файле, после чего имеется возможность экспортировать эту секцию в eeprom-hex файл, а данные секции .text и иже с ним в flash-hex файл.
Потом программатором зашиваете эти оба файла в микроконтроллер.


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


Участник
*

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



Цитата(demiurg_spb @ May 29 2015, 11:52) *
После сборки проекта вы получаете секцию с ЕЕПРОМ переменными в elf файле, после чего имеется возможность экспортировать эту секцию в eeprom-hex файл, а данные секции .text и иже с ним в flash-hex файл.
Потом программатором зашиваете эти оба файла в микроконтроллер.


Т.е все равно нужно использовать два файла для прошивки eeprom и flash?

Сообщение отредактировал Twin_by - May 29 2015, 09:09
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Twin_by   Прошивка Flash и EEPROM одним файлом hex или elf   May 25 2015, 05:26
- - demiurg_spb   Цитата(Twin_by @ May 25 2015, 08:26) Неп...   May 25 2015, 13:54
- - Twin_by   Цитата(demiurg_spb @ May 25 2015, 16:54) ...   May 25 2015, 14:50
- - alexeyv   1. На производстве используют программатор ASISP и...   May 26 2015, 03:51
- - Twin_by   Цитата(alexeyv @ May 26 2015, 06:51) 2. П...   May 26 2015, 04:44
- - qwerty1023   Тут наверное имеется в виду что-то типа Код//_e_d...   May 26 2015, 07:00
- - alexeyv   Выбираешь один из неиспользуемых адресов в EEPROM ...   May 26 2015, 08:05
|- - Twin_by   Цитата(alexeyv @ May 26 2015, 11:05) Напр...   May 28 2015, 11:09
- - zltigo   1) Все данные ЕЕPROМ в структуру, это святое и не ...   May 29 2015, 09:10
|- - VladislavS   Цитата(zltigo @ May 29 2015, 12:10) Все. ...   May 31 2015, 11:31
- - alexeyv   to demiurg_spb Цитата1. Во всех ваших примерах над...   Jun 1 2015, 03:53
|- - demiurg_spb   Цитата(alexeyv @ Jun 1 2015, 06:53) Но в ...   Jun 1 2015, 07:06
|- - Twin_by   Цитата(demiurg_spb @ May 29 2015, 11:07) ...   Jun 1 2015, 07:57
- - alexeyv   ЦитатаЯ уже об этом писал и объяснил зачем это нуж...   Jun 3 2015, 02:39
- - Сергей Борщ   Цитата(alexeyv @ Jun 3 2015, 05:39) У мен...   Jun 3 2015, 04:47


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

 


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


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