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

[Atmega8][C]odczyt tablicy z pamieci eeprom

ziggi86 13 Wrz 2009 00:13 2925 5
  • #1 7011339
    ziggi86
    Poziom 13  
    Witam


    Mam następujący problem, do pamięci eeprom atmegi 8 chce zapisać taka oto tablicę:

    const uint16_t EEMEM C_rtd[] = {0	,233,	466,	699,	933,	1166,	1400,	1634,	1868,	2102,	2336,	2571	,2805,	3040,	3275,	3510,	3746,	3981,	4217,	4453,	4689,	4925,	5161,	5398,	5635,	5871,	6108,	6346,	6583,	6820,	7058,	7296,	7534,	7772,	8011,	8249,	8488,	8727,	8966,	9205,	9445,	9684,	9924,	10164,	10404,	10644,	10885,	11125,	11366,	11607,	11848,	12090,	12331,	12573,	12815,	13057,	13299,	13542,	13784,	14027,	14270,	14513,	14757,	15000};


    Zgodnie z biblioteką avr/eeprom.h użyłem definicji EEMEM i tablica została umieszczona w pamięci eeprom jak chciałem :) tylko że ... teraz pojawia się pytanie jak się dostać do tej tablicy ? Próbowałem odczytywać to za pomocą poniższej funkcji:

    	C_rtd_i=eeprom_read_word ((uint16_t*)i); 
    	 


    (i to kolejna pozycja tablicy którą chce odczytać)

    Tylko że nie za bardzo to chce działać, nie wiem dokładnie jak to jest umieszczone w pamięci eeprom- chodzi mi numeracje tablicy począwszy od 0, czy koniecznie kompilator zaczyna od 0 komórki pamięci ?

    I czy ze względu na odczyt, numer poszczególnego elementu tablicy adres komórki nie powinien być przemnożony przez 2 ? (każdy element tablicy jest 16 bitowy, a komórka pamięci 8 bitowa czyli np element w tablicy numer 3 powinien mieć adres 6 w komórce pamięci eeprom...) czy mam racje ?:) w kazdym razie przy przemnożeniu numeru komórki przez 2 też nie działa :>




    Z góry dziękuje za wszelką pomoc.
  • #3 7011416
    rusala
    Poziom 22  
    moznaby uzyc eeprom_read_block i ewentualnie rzutowac to co odczytasz
  • #4 7012798
    ziggi86
    Poziom 13  
    witam


    Cytat:
    C_rtd_i = eeprom_read_word(&C_rtd[i]); 
    [code]

    nie działa, odczytuje jakąś tajemniczą wartość 5535 dla każdego elementu tablicy (jeśli za i podstawie liczbę z zakresu 0-63 co odpowiada adresowi elementu tablicy),

    Z odczytaniem bloków to wydaje mi się że trochę na około, napewno da się to zrobić jakoś prościej ;) ale dzięki za pomysł.
  • #5 7012815
    rusala
    Poziom 22  
    ale czemu naookolo? ta instrukcja sluzy wlasnie do odczytywania tablic z tym ze domyslnie 8 bitowych. takwiec odczytujesz sobie do tablicy typu char a pozniej deklarujesz jeden wskaznik na int do ktorego przypisujesz adres pierwszego elementu tablicy zrzutowany na int i powinno dzialac. Ja tu specjalnie niczego na okolo nie widze, to jest ten sam poziom abstrakcji co odczytywanie tablicy jako pojedynczych slow ;-) No chyba ze wlasnie takie jest zalozenie ze nigdy w ramie niema calej tablicy z eepromu.
  • #6 7018467
    ziggi86
    Poziom 13  
    Witam

    Po długiej walce z problemem okazało się że tkwił w pony progu 2000 (versje 2.07C beta i 2.06 beta+ programatr ISP stk200 LPT)+błędy składniowe poprawione powyżej :)

    Powyższe wersje nie programowały poprawnie pamięci epprom-niewiem w czym był problem... (przegrywanie pliku *epp było zrealizowane ale potem przy odczycie wartości z zaprogramowanej pamięci eeprom zawsze był ten sam wyniki mający się nijak do przechowywanej wartości ).

    Bez problemu zapis udało się zrealizować na ISP programerze oraz AVRdude z nakładką GUI+ten sam programator.

    Informacje pozostawiam dla przyszłych pokoleń,

    Dziękuje za pomoc i wszelkie sugestie.

    Zamykam temat.
REKLAMA