logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

POTER 25 Lut 2010 19:41 5911 5
  • #1 7750059
    POTER
    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 ??
  • #2 7750229
    baxter007
    Poziom 11  
    witam,
    dobry przykład obsługi eepromu zamieszczony jest w dokumentacji od atmegi i wygląda to tak :
    
    
    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].
  • #3 7750260
    POTER
    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
    #4 7750406
    michalko12
    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
    #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
    #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
  • #5 7750544
    POTER
    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..
  • #6 7751157
    acid12
    Poziom 21  
    zastanów się też nad użyciem fusa EESAVE, który blokuje czyszczenie eepromu podczas kasowania pamięci flash, przydatne :)
REKLAMA