Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak tworzyć tablice danych i zapisać ja w eeprom[atmega8][c]

25 Lut 2010 19:41 5452 5
  • Poziom 13  
    Witam
    Czy jest możliwość stworzenia tablicy która będzie zapisana w pamięci eeprom ??

    Mam ta tablice ( raczej dane jakie mam w niej umieścic) i jak nie ma innej opcji wpiszę je ręcznie w edytorze hex.. korzystam z avrstudio i nie bardzo wiem jak mogłbym sobie z tym poradzić


    ten uC ma 512 bajtów moje dane zajmują troche ponad 300 chodzi mi o przykład czy mogę zadeklarować jakoś nową tablice i wskazać kompilatorowi aby zapisał ją od danego adresu w eeprom ??
  • Poziom 11  
    witam,
    dobry przykład obsługi eepromu zamieszczony jest w dokumentacji od atmegi i wygląda to tak :
    Code:


    void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
       {
       while(EECR & (1<<EEWE));
       EEAR = uiAddress;
       EEDR = ucData;
       EECR |= (1<<EEMWE);
       EECR |= (1<<EEWE);   
       }

    unsigned char EEPROM_read(unsigned int uiAddress)
       {
       while(EECR & (1<<EEWE));
       EEAR = uiAddress;
       EECR = (1<<EERE);
       return EEDR;
       }


    są to dwie funkcje zapisu i odczytu,a obsługa ich banalnie prosta :

    gdy chcesz zapisać wartość zmiennej char do eeprom to :

    EEPROM_write(0, zmienna);

    gdzie 0 to adres pamięci, i odczyt:

    EEPROM_read(0);

    zwróci zawartość pamięci o adresie 0.

    W Twoim przypadku myślę ze wystarczy uznać całą przestrzeń eeprom jako tablice EEPROM[512].
  • Poziom 13  
    No tak ale to w takim układzie nie marnuję miejsca w pamieci programu ?? bo inicjuję tam tablicę którą poźniej przepisuje według tej notacji atmegi do eepromu ??? czy mi sie tak dziwnie tylko wydaje ??
  • Pomocny post
    Specjalista - Mikrokontrolery
    POTER napisał:
    Witam
    Czy jest możliwość stworzenia tablicy która będzie zapisana w pamięci eeprom ??

    Mam ta tablice ( raczej dane jakie mam w niej umieścic) i jak nie ma innej opcji wpiszę je ręcznie w edytorze hex.. korzystam z avrstudio i nie bardzo wiem jak mogłbym sobie z tym poradzić


    ten uC ma 512 bajtów moje dane zajmują troche ponad 300 chodzi mi o przykład czy mogę zadeklarować jakoś nową tablice i wskazać kompilatorowi aby zapisał ją od danego adresu w eeprom ??


    Rozumiem że chodzi o AVR Studio + GCC

    Przykład:


    Plik .h
    Code:
    #ifndef _SETTINGS_H_
    
    #define _SETTINGS_H_


    typedef struct
    {
       unsigned char AddressMAC[6];
       unsigned char AddressIP[4];
       unsigned char MaskIP[4];
       unsigned char GateIP[4];
       unsigned char SNTPServerIP[4];
       unsigned short SNTPPeriod;
       unsigned char TimeZone;
    }settings_t;


    extern settings_t Settings;   


    void ReadSettings(void);
    void WriteSettings(void);



    #endif



    Plik .c
    Code:
    #include <avr/eeprom.h>
    
    #include "settings.h"

    settings_t SettingsEEPROM EEMEM = {{0,1,2,3,4,5},{192,168,0,200},{255,255,255,0},{192,168,0,1},{153,19,250,123},3600,0};

    settings_t Settings;   

    //153,19,250,123
    //192,168,10,101


    void ReadSettings(void)
    {
       eeprom_read_block(&Settings,&SettingsEEPROM,sizeof(settings_t));
    }

    void WriteSettings(void)
    {
       eeprom_write_block(&Settings,&SettingsEEPROM,sizeof(settings_t));
    }   



    Kompilator wygeneruje plik z rozszerzeniem .epp i to bedziesz musiał wpisac do EEPROMa za pomoca programatora.

    Reszte funkcji do obsługi EEPROMa masz tu Link
  • Poziom 13  
    Tak avrstudio +gcc :D Dzięki wielkie zaraz spróbuję to ogarnąć i mam nadzieje ze ruszy bez zbędnych kłopotów ale jak coś to zapytam..
  • Poziom 21  
    zastanów się też nad użyciem fusa EESAVE, który blokuje czyszczenie eepromu podczas kasowania pamięci flash, przydatne :)