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

 
 
 
Reply to this topicStart new topic
> Подскажите как struct типа __eeprom заставить лежать не с нулевого адреса EEPROM
west329_
сообщение May 14 2009, 07:47
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Компилятор IAR AVR 5.20. Контроллер mega162.

Требуется заставить компилятор не использовать первые 64 байта в EEPROM.

Объявляю в *.h
Код
typedef struct  T_EEPROM
  {
    unsigned char   Key[16];
    unsigned long   Login;
    unsigned char   IP_Server[4];
    unsigned int    Port_Server;
    unsigned int    Port_Client;
    unsigned char   APN[24];
    unsigned char   Serial[8];
    unsigned long   CRC32;
  }  T_EEPROM_Header;


потом
Код
T_EEPROM_Header       __eeprom *EE_Header;


и обращение такое в качестве теста
Код
    EE_Header->Key[0] = 10;
    EE_Header->Key[1] = 11;
    EE_Header->Key[5] = 12;
    EE_Header->Key[10] = 13;
    EE_Header->Key[14] = 14;
    EE_Header->Key[15] = 15;    
    EE_Header->Login = 0x00000000;
    EE_Header->IP_Server[0]=1;
    EE_Header->IP_Server[1]=2;
    EE_Header->IP_Server[2]=3;
    EE_Header->IP_Server[3]=4;
    EE_Header->Port_Server = 0xAAAA;
    EE_Header->Port_Client = 0xBBBB;
    EE_Header->APN[0] = 1;
    EE_Header->APN[1] = 2;
    EE_Header->APN[5] = 3;
    EE_Header->APN[10] = 4;
    EE_Header->APN[22] = 5;
    EE_Header->APN[23] = 6;    
    EE_Header->CRC32 = 0xCCDDEE00;


чтоб не использовать первые 64 байта памяти еепром, правлю файл cfgm162.xcl так
Код
//////////////////////////////////////////////////////////////////////////////
// Internal EEPROM
-D_..X_EEPROM_END=1FF       // End of eeprom memory
//-D_..X_EEPROM_START=0    //OLD
-D_..X_EEPROM_START=64    //NEW


как только начинаю заполнять стркутуру, он пишется с 0 адреса laughing.gif

если начинаю использовать раздельные данные без структуры типа
Код
__no_init unsigned int __eeprom Dest_Port_eeprom;
__no_init unsigned int __eeprom Sour_Port_eeprom;


то при записи в них данных
Код
    
Dest_Port_eeprom = 0xABCD;
Sour_Port_eeprom = 0xEFAB;

они ложатся точно со смещения в 64 байта, но хочется использовать структуру.

Подскажите, что неправильно
Go to the top of the page
 
+Quote Post
Vitaly
сообщение May 14 2009, 07:58
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 17-06-05
Пользователь №: 6 095



__no_init __eeprom T_EEPROM_Header EEPROM_Header @0x40;
и cfgm162.xcl можно не править
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение May 14 2009, 08:03
Сообщение #3


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

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



Цитата(west329_ @ May 14 2009, 11:47) *
Код
T_EEPROM_Header       __eeprom *EE_Header;

если Вы используете указатель, никакой компилятор за Вас его инициализировать не станет. поэтому либо объявляйте статическую структуру в EEPROM, и работайте с ней, либо инициализируйте указатель сами, но тогда имейте в виду, что компилятор под эту структуру память сам выделять не будет (распределение памяти ложится целиком на Вас)
Go to the top of the page
 
+Quote Post
west329_
сообщение May 14 2009, 08:17
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(sergik_vrn @ May 14 2009, 12:03) *
если Вы используете указатель, никакой компилятор за Вас его инициализировать не станет. поэтому либо объявляйте статическую структуру в EEPROM, и работайте с ней, либо инициализируйте указатель сами, но тогда имейте в виду, что компилятор под эту структуру память сам выделять не будет (распределение памяти ложится целиком на Вас)


У Вас не найдётся выжимки из кода как правильно объявить статическую структуру в EEPROM, я просто в первый раз работать с подобным.


Благодарю за помощь, заработало.
Код
__no_init __eeprom T_EEPROM_Header EE_Header;


обращение
Код
EE_Header.Key[0] = 10;
EE_Header.Key[1] = 11;
EE_Header.Key[5] = 12;
EE_Header.Key[10] = 13;
EE_Header.Key[14] = 14;


Всётаки остановился на варианте с редактирование линк фала
Код
//-D_..X_EEPROM_START=0
-D_..X_EEPROM_START=40


Сообщение отредактировал west329_ - May 14 2009, 08:32
Go to the top of the page
 
+Quote Post
Dir
сообщение May 21 2009, 19:51
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(west329_ @ May 14 2009, 10:47) *
Компилятор IAR AVR 5.20. Контроллер mega162.
Требуется заставить компилятор не использовать первые 64 байта в EEPROM.

Ну так забей первые 64 байта чем то ненужным.
Например:
Код
__eeprom __root char eNull[64] @0;

Все задокументировано в коде. А зачем редактировали линкер может забыться со временем. Да и быстрее, ИМХО.
Go to the top of the page
 
+Quote Post

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

 


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


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