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

Подскажите как struct типа __eeprom заставить лежать не с нулевого адреса EEPROM

Компилятор 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:

 

если начинаю использовать раздельные данные без структуры типа

 __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 байта, но хочется использовать структуру.

 

Подскажите, что неправильно

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


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

T_EEPROM_Header       __eeprom *EE_Header;

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

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


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

если Вы используете указатель, никакой компилятор за Вас его инициализировать не станет. поэтому либо объявляйте статическую структуру в 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_

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


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

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

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

Ну так забей первые 64 байта чем то ненужным.

Например:

__eeprom __root char eNull[64] @0;

Все задокументировано в коде. А зачем редактировали линкер может забыться со временем. Да и быстрее, ИМХО.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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