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

Atmega32 + eeprom = avrdude: ERROR:...

bisz 16 Lis 2010 22:35 1929 6
REKLAMA
  • #1 8753193
    bisz
    Poziom 18  
    Witam. Gdy na mikrokontrolerze Atmega32 chcę użyć pamięci eeprom,w sposób taki :

    static EEMEM uint8_t zmienna_w_eepromie = 'a';	  


    to na etapie programowania mam taki komunikat :

    avrdude: ERROR: address 0x810001 out of range at line .... of efi.hex


    co robie źle ?
    Dodam, że programuję składnią :
    avrdude -c usbasp -p atmega32 -V -U flash:w:plik.hex


    Czy trzeba użyć przy programowaniu jakichś innych parametrów ?
  • REKLAMA
  • #2 8753422
    mirekk36
    Poziom 42  
    bisz napisał:

    co robie źle ?
    Dodam, że programuję składnią :
    avrdude -c usbasp -p atmega32 -V -U flash:w:plik.hex


    Czy trzeba użyć przy programowaniu jakichś innych parametrów ?


    Po pierwsze to taką składnią chyba jak sam widzisz programujesz tylko pamięć FLASH, więc nawet jeśli już umieściłbyś tą zmienną w EEPROM to po uruchomieniu procka i tak byś jej tam nie zobaczył - to chyba oczywiste że musiałbyś wgrać także plik *.eep z zawartością wygenerowaną dla EEPROM

    bisz napisał:
    Witam. Gdy na mikrokontrolerze Atmega32 chcę użyć pamięci eeprom,w sposób taki :

    static EEMEM uint8_t zmienna_w_eepromie = 'a';	  


    to na etapie programowania mam taki komunikat :

    avrdude: ERROR: address 0x810001 out of range at line .... of efi.hex


    A dlaczego miałoby się to nie skompilować ?

    Być może zapchałeś już tymi zmiennymi cały EEPROM albo kto wie co tam zrobiłeś.
  • REKLAMA
  • #3 8754014
    bisz
    Poziom 18  
    To może ja powiem co jak robię.

    Mam taki skrypcik pod linuksem własnoręcznie napisany który kompiluje i programuje.
    
    avr-gcc -msize  -mmcu=atmega32 plik.c -o plik.out
    avr-objcopy -O ihex plik.out plik.hex
    avrdude -c usbasp -p atmega32 -V -U flash:w:plik.hex
    


    Do tego dorzucam jeszcze polecenia dla epromu:
    
    avr-objcopy -j .eeprom -O ihex plik.out eeprom.hex
    avrdude -c usbasp -p atmega32 -V -U eeprom:w:eeprom.hex
    


    Teraz faktycznie nie ma tego błędu, ale czy na tym etapie robię coś źle ?
  • REKLAMA
  • #4 8754133
    mirekk36
    Poziom 42  
    Jeśli nie ma błędu i teraz po wgraniu wygenerowanej zawartości eeprom jest tam twoja zmienna to OK ;)

    a czy coś robisz źle w tych wywołaniach (skryptach) linuxowych - to ja już nie podpowiem - nie znam linuxa.
  • #5 8754489
    bisz
    Poziom 18  
    W sumie to nie ma znaczenia czy sa to skrypty linuksowe czy nie, składnia dla winavr jest taka sama. Moje pytanie jest takie bo nie jestem pewien czy dobrze rozumiem filozofie tej pamięci. Czy z poziomu kodu programu, jeżeli stworzę odpowiedni program obsługujący transmisję szeregową, to czy moge wpisywać sobie do pamięci EEPROM dowolne dane, np poprzez terminal , lub jakkolwiek inaczej na podstawie zdarzeń zewnętrznych ?
  • #6 8754705
    mirekk36
    Poziom 42  
    Pamięć EEPROM po to jest żeby w niej zapisywać i z niej odczytywać dowolne swoje dane, które mają być przechowywane podczas wyłączenia zasilania.

    Musisz tylko wziąć pod uwagę, że pamięć EEPROM to nie RAM. Różnice nie polegają tylko na tym, że inaczej się ją obsługuje, że trzyma dane przy wyłączonym procku ale także to, że ma ograniczoną ilość zapisów. Masz to napisane na pierwszej stronie noty PDF. Zatem służy ona raczej do przechowywania jakichś ustawień itp - czyli takich danych, które nie będą zbyt często zapisywane - co chyba zrozumiałe.
  • REKLAMA
  • #7 8761397
    bisz
    Poziom 18  
    Tak zdaje sobie sprawe z ograniczonej ilosci zapisow.
    Już się uporałem. Należało na etapie konwersji na hex dodać parametr -R .eeprom
REKLAMA