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

Atmega16 Atmel Studio - eeprom_write_block zapisuje tylko jeden bajt, dlaczego?

matej1410 26 Lut 2017 23:49 987 4
  • #1 16310089
    matej1410
    Poziom 25  
    Witam.

    Przeprowadzam symulację w AS zapisując dane do EEPROM:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    w rezultacie tylko jeden bajt zapisuje się do EEPROM. Dlaczego?
    Atmega16 Atmel Studio - eeprom_write_block zapisuje tylko jeden bajt, dlaczego?
  • Pomocny post
    #2 16310520
    simw
    Poziom 27  
    Na pierwszy rzut oka wydaje mi się, że źle wyliczasz długość struktury:
    eeprom_write_block(&mystructure,&EEStruct, sizeof(ST))

    Obliczasz długość struktury podając w parametrze sizeof nowy typ strukturalny i pewnie wylicza wielkość struktury na jeden bajt, co za tym zapisuje blok jednobajtowy.
    Spróbuj zmienić na:
    eeprom_write_block(&mystructure,&EEStruct, sizeof( mystructure ))

    Wtedy sizeof powinno zwrócić właściwą wielkość bloku.
  • #3 16310715
    matej1410
    Poziom 25  
    Próbowałem tak, ale niestety nie pomaga

    Dodano po 1 [godziny] 53 [minuty]:

    A czy ktokolwiek symulował pracę na EEPROMIE w Atmel Studio 6 albo 7 i jest w stanie potwierdzić, że samo środowisko nie ma jakiegoś byka, bo być może ja się tu męczę z ta funkcją i mój kod jest poprawny?
  • Pomocny post
    #4 16310959
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #5 16312784
    kamyczek
    Poziom 38  
    Jeśli symulator zapisał pierwszą komórkę powinien zapisać kolejne , ciężko to zobaczyć przy pracy krokowej bo zapis eeprom trwa od 3,4ms do 8,5ms w rzeczywistości ale w symulatorze należy to odnieść do ilości cykli mikrokontrolera . Biorąc pod uwagę że symulator programowy możliwie wiernie naśladuje mikrokontroler możliwość zapisu kolejnej komórki wystąpi najwcześniej po 3,4ms czyli dla 8MHz po 27200 impulsów czego w pracy krokowej to raczej nie widzę . Trzeba więc ustawić pułapkę na zmianę w rejestrze odpowiedzialnym za zapis uruchomić tryb automatyczny i poczekać dłuższą chwilę jak symulator doliczy się określonej liczby i zwolni możliwość zapisu kolejnej komórki eeprom .
REKLAMA