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

[AVR] - Czas zapisu EEPROM w Atmega8 przy 4MHz i 16MHz, wpływ na wydajność

sorex86 29 Lip 2013 19:50 1689 1
REKLAMA
  • #1 12574322
    sorex86
    Poziom 15  
    Witam,

    Zapisz_buffor to funkcja z ksiazki tmf. Zapisuje ona cyklicznie do buffora skladajcego sie z 1000 komorek eepromu kolejne wartosci licznika. Program mam napisany w nastepujacym stylu:

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


    W jakim czasie mikroprocesor wykonuje ten kod? Obecnie uzywam atmegi8 i kwarcu 4Mhz. Jezeli zmienie kwarc na 16Mhz to kod bedzie sie tak samo szybko wykonywal czy teoretycznie 4x szybciej? Rozumiem, ze czas zapisu/odczytu do EEPROMu w tym wypadku jest kluczowy. Czy mikroprocesor podczas zapisu do eepromu wykonuje inne funkcje z kodu czy jest bezczynny jak np podczas wykonywania blokujacej funkcji _delayms_ ?

    Czy predkosc zapisu do EEPROM zalezy od zastosowanego kwarcu czy raczej od technologii wykonywania EEPROMu w AVR? Rozumiem, ze zapis(z kasowaniem) EEPROMu trwa ~5ms, a sam odczyt 3,2ms. Czy w takim wypadku czas wykonywania kodu w najgorszym wypadku wynosi 1000*3,2ms?

    Czy zamiania kolejnosci wykonywania funkcji przyspieszy o ~5ms zmiane stanu pinu PB0?

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


    Jezeli "zapisz_buffor" jest przed "zmieniam_PB0" to najpierw nastapi zapis do eeprom (~5ms), a dopiero potem nastapi zmiana stanu pinu PB0? Tzn. PB0 bedzie mialo opoznienie = czasowi zapisu do EEPROM?
  • REKLAMA
  • Pomocny post
    #2 12574485
    tmf
    VIP Zasłużony dla elektroda
    Odczyt EEPROM trwa tyle co odczyt IO. Nie wnosi żadnych opóźnień. Zapis - jest zależny od MCU, dokłądne czasy znajdziesz w jego nocie - zwykle to 2-5 ms. Podczas zapisu procesor może wykonywać inne instrukcje, a nawet je wykonuje. Tylko, żeby z tego skorzystać należy dokonać zapisu z wykorzystaniem przerwań - po zaposaniu komórki wywoływane jest przerwanie od EEPROM, w któym możesz zainicjować zapis kolejnej komórki.
    Czas zapisu jest niezależyn od taktowania MCU, więc 4-krotne przyśpieszenie zegara praktycznie nic nie zmieni. Co do opóźnień - funkcjje zapisu EEPROM z AVR-libc czekają na gotowość do zapisu, wydają polecenie zapisu i zaraz wracają. Stąd też jeśli zapisujesz tylko jedną komókę pamięci to opóźnienia nie będzie, jeśli dwie pod rząd to będzie zapis jednej, czekanie na koniec, zapis drugiej, itd.
REKLAMA