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

[Rozwiązano] Funkcja eeprom_update_block w AVR Xmega - czy aktualizuje tylko potrzebne bajty?

lupin22 28 Sie 2021 13:35 453 5
REKLAMA
  • #1 19584313
    lupin22
    Poziom 10  
    Cześć,

    coś nie mogę znaleźć odpowiedzi na moje pytanie - czy funkcja avr libc

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


    wykonuje eeprom_update_byte w pętli i aktualizuje tylko te bajty, które trzeba? Czy jeżeli znajdzie jedną różnicę to nadpisuje cały blok? Zakładałbym, że pętla, ale gdybym się mylił to miałoby to bardzo nieprzyjemne konsekwencje w przyszłości.

    Z góry dzięki za odpowiedź.
  • REKLAMA
  • Pomocny post
    #2 19584600
    mpier
    Poziom 29  
    Witam,
    jako że się nie znam, to sprawdziłbym w źródłach, i może bym znalazł powyższą funkcję w eeupd_block.S.

    Pozdrawiam.
  • REKLAMA
  • #3 19584663
    lupin22
    Poziom 10  
    mpier napisał:
    Witam,
    jako że się nie znam, to sprawdziłbym w źródłach, i może bym znalazł powyższą funkcję w eeupd_block.S.

    Pozdrawiam.


    Nie jestem specjalistą, dlatego zadałem tutaj pytanie. Najdalej, gdzie dotarłem to eeprom.h w atmel studio. Plik eeupd_block.S musiałem wygooglować. Funkcja wygląda tak:

    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod


    To wywołanie

    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod


    jestem w stanie rozszyfrować, bo tak funkcja eeprom_update_byte nazywa się w eeupd_byte.s, ale co się dzieje w pozostałej części to już nie wiem. Skoro jest update byte to zapewne jest pętla, ale wolałbym nie zgadywać.
  • REKLAMA
  • Pomocny post
    #4 19584729
    tmf
    VIP Zasłużony dla elektroda
    Funkcja odczytuje bajt z EEPROM, porównuje z bajtem do zapisania i jeśli są różne to zapisuje, jeśli takie same, to przechodzi dalej nie robiąc nic.
    Ponieważ w XMEGA dostęp do EEPROM jest znacznie bardziej zaawansowany (m.in. możliwość jednoczesnego zapisu całej strony EEPROM i odczytu EEPROM przez region zmapowany w przestrzeń adresową MCU, warto się pokusić o napisanie własnych funkcji dostępu do EEPROM. One mogą działać znacznie (nawet 32-razy) szybciej niż te standardowe.
  • REKLAMA
  • #5 19584747
    lupin22
    Poziom 10  
    tmf napisał:
    Funkcja odczytuje bajt z EEPROM, porównuje z bajtem do zapisania i jeśli są różne to zapisuje, jeśli takie same, to przechodzi dalej nie robiąc nic.

    Dziękuję, tak zakładałem.
    tmf napisał:
    One mogą działać znacznie (nawet 32-razy) szybciej niż te standardowe.

    W moim przypadku szybkość zapisu nie jest istotna, dlatego korzystam z najprostszych rozwiązań.
  • #6 19584752
    lupin22
    Poziom 10  
    tmf napisał:
    Funkcja odczytuje bajt z EEPROM, porównuje z bajtem do zapisania i jeśli są różne to zapisuje, jeśli takie same, to przechodzi dalej nie robiąc nic.

    Dziękuję, tak zakładałem.
    tmf napisał:
    One mogą działać znacznie (nawet 32-razy) szybciej niż te standardowe.

    W moim przypadku szybkość zapisu nie jest istotna, dlatego korzystam z najprostszych rozwiązań.

    Dodano po 45 [sekundy]:

    Funkcja sprawdza po kolei każdy bajt i wywołuje na nich eeprom_update_byte.
REKLAMA