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

 
 
> Вопрос по EEPROM
tier
сообщение Apr 11 2012, 08:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 14-08-09
Пользователь №: 51 892



Всем Добрый день. Ребята, подскажите как мне можно поступить в этом случае:

Код
#include <avr/io.h>
#include <avr/pgmspace.h>

typedef struct {
void   *FPointerStruct;      // указатель на следующую структуру
uint8_t   FVariable;
} FData_t;

FData_t FData1, FData2;      // объявим структуры

FData_t PROGMEM FData1 = {(void*)&FData2, 0xAA};   // поместим во Flash
FData_t PROGMEM FData2 = {(void*)&FData1, 0xBB};

uint8_t u08_Data1, u08_Data2;

int main(void)
{
FData_t *temp;
    
    temp=(FData_t *)&FData1;         // текущая структура FData1
    u08_Data1=pgm_read_byte(&(temp->FVariable));    // читаем 0xAA
    
    temp=(FData_t *)pgm_read_word(&temp->FPointerStruct);   // текущая структура FData2
        u08_Data2=pgm_read_byte(&(temp->FVariable));    // читаем 0xBB
}


а вот в EEPROM у меня так же не получается

Код
  
#include <avr/io.h>
#include <avr/eeprom.h>

typedef struct {
void   *EPointerStruct;
uint8_t   EVariable;
} EData_t;

EData_t EData1, EData2;          // объявим структуры

EData_t EEMEM EData1 = {(void*)&EData2, 0xAA};     // поместим в EEPROM
EData_t EEMEM EData2 = {(void*)&EData1, 0xBB};

uint8_t u08_Data1, u08_Data2;

int main(void)
{
EData_t *temp;
    
    temp=(EData_t *)&EData1;         // текущая структура EData1
    u08_Data1=eeprom_read_byte(&(temp->EVariable));     // читаем 0xAA
    
    //temp=(EData_t *)eeprom_read_word(&temp->EPointerStruct);  // вот здесь проблема
    u08_Data2=eeprom_read_byte(&(temp->EVariable));        // опять читаем 0xAA
}


Конечно можно просто сделать ++temp, но это не подходит, потому что перейдет на структуру после последней.... и попадем в область где уже нет ничего....
Компилятор avr-gcc. Спасибо.

Go to the top of the page
 
+Quote Post



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

 


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


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