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

Jak zadeklarować zmienną w EEPROM AVR-GCC pod adresem 0x01?

erfro 27 Lis 2006 15:18 2257 4
REKLAMA
  • #1 3268842
    erfro
    Poziom 15  
    Posty: 188
    Pomógł: 3
    Ocena: 30
    Podpowiedzcie mi prosze, jak zadeklarowac zmienna w pamięci eeprom po adresem 0x01??

    bo:
    #define EEMEM __attribute__((section(".eeprom")))

    EEMEM unsigned char ZMIENNA;

    lokuje ja w pierwszej wolnej komorce czyli 0x00. Moge zadeklarowac wczesniej inna zmienna PUSTĄ tak aby kompilator ulokowal ja pod 0x00 ale nie jest to elegancke.

    W '51 robilo sie to tak w pamięci programu:
    at 0x00 code unsigned char ZMIENNA, a jak umiescić zmienne czy nawet funkcje lub procedur pod konkretnym adresem w AVR-GCC??
  • REKLAMA
  • #2 3269016
    www
    Poziom 14  
    Posty: 219
    Pomógł: 7
    Ocena: 13
    Jeśli chcesz coś zapisać w pamięci EEPROM musisz zrobić coś takiego:

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

    dostęp do tej pamięci nie jest bezpośredni.
  • REKLAMA
  • #3 3270093
    erfro
    Poziom 15  
    Posty: 188
    Pomógł: 3
    Ocena: 30
    ja procedurke do zapisu to mam i ona dziala bez problemu eeprom_write_byte(adres, wartosc)
    Problem polega na tym ze chce zadeklarowac zmienna jak np w asm51:

    CSEG czy DSEG i AT 0x60 (to taki przyklad)

    chce to samo zrobic w C, w c dla 51 bylo to tak:
    at 0x100 code unsigned char ZMIENNA

    a jak to zrobic w C dla AVR?? Rozumiesz, potrzebuje umiescic zmienna w okerslonym adresie w przestrzeni np RAM, albo EEPROM, albo funkcje pod adresem powiedzmy znowu dla przykladu 0x100

    at 0x100 void funkcja(void) {}

    jak to formalnie ujac??
  • REKLAMA
  • #4 3270793
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    erfro napisał:
    ...a jak to zrobic w C dla AVR?? Rozumiesz, potrzebuje umiescic zmienna w okerslonym adresie w przestrzeni np RAM, albo EEPROM, albo funkcje pod adresem powiedzmy znowu dla przykladu 0x100

    at 0x100 void funkcja(void) {}

    jak to formalnie ujac??

    No to musisz się trochę pogimnastykować , bawiąc sie atrybutami,oraz definiowaniem własnych sekcji.Po tych zabiegach wystarczy poinformować linker'a , o swych niecnych zamiarach.Krótko mówiąc , jest z tym trochę roboty :D

    Piotrek
  • #5 3271391
    erfro
    Poziom 15  
    Posty: 188
    Pomógł: 3
    Ocena: 30
    Tak tez myslalem, ze nie bedzie prosto, ale mam juz na to pewien pomysl. No nic sprobuje, moze sie uda.
    Dzieki
REKLAMA