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

 
 
> Расположить переменную EEPROM по фиксированному адресу, WinAVR
777777
сообщение Jun 10 2010, 07:23
Сообщение #1


Профессионал
*****

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



Хочу поместить в EEPROM две структуры, одну по нулевому адрусу, другую по адресу 0x100. Потому что в будущем размер первой структуры может измениться, а начальный адрес второй должен остаться прежним. Пока удалось это сделать только расположив между ними массив нужного размера для заполнения. Но ведь можно как-то сделать по нормальному, указав начальный адрес секции. Как это можно сделать? Как, вообще, указать что это секция для EEPROM? В avr-libc-user-manual про EEPROM ничего нет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
swisst
сообщение Jun 10 2010, 13:52
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(777777 @ Jun 10 2010, 10:23) *
Хочу поместить в EEPROM две структуры, одну по нулевому адрусу, другую по адресу 0x100. Потому что в будущем размер первой структуры может измениться, а начальный адрес второй должен остаться прежним. Пока удалось это сделать только расположив между ними массив нужного размера для заполнения. Но ведь можно как-то сделать по нормальному, указав начальный адрес секции. Как это можно сделать? Как, вообще, указать что это секция для EEPROM? В avr-libc-user-manual про EEPROM ничего нет.


есть методы работы с еепром (eeprom_read, eeprom_write). обратиться к структуре напрямую Вы не можете (типа temp = eeprom_struct.var_1 ), только через процедуру чтения/записи. так вот, адрес по которому располагается Ваша переменная передается параметром и достаточно его задефайнить:

Код
#define EEPROM_STRUCT_1_ADDRESS   0x0000
#define EEPROM_STRUCT_2_ADDRESS   0x0100


также задефайнить можно все адреса элементов структуры.
Go to the top of the page
 
+Quote Post
777777
сообщение Jun 11 2010, 04:24
Сообщение #3


Профессионал
*****

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



Цитата(swisst @ Jun 10 2010, 17:52) *
также задефайнить можно все адреса элементов структуры.

Есть способ лучше - объявить переменную с модификатором EEMEM который есть #define EEMEM __attribute__((section(".eeprom")))

Хочется объявить еще секцию, допустим __attribute__((section(".eeprom2"))) но как указать ее начальный адрес? А также то, что это секция - EEPROM?

Цитата(Сергей Борщ @ Jun 10 2010, 18:11) *
Так же, как и с любыми другими данными - кладете в отдельный сегмент и в скрипте линкера указываете, куда его положить.

Так вот я и спрашиваю, как пишется этот скрипт? И как указать, что эта секция - EEPROM. Я понимаю, линкеру это не надо, ему нужны лишь адреса, которые получат находящиеся там переменные. Но ведь компилятор сообщает сколько байт занято в какой памяти, и при программировании он "знает" какие байты помещаются во флэш, т.е. являются программой, а какие в EEPROM.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:51
Рейтинг@Mail.ru


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