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

Czy blokowanie przerwań na AVR jest konieczne przy odczycie z ADC?

Krokus22 28 Lut 2012 13:48 1345 4
REKLAMA
  • #1 10610377
    Krokus22
    Poziom 19  
    Witam, przygotowując kolejny projekt i przeglądając dokumentacje porządnie napisanych bibliotek na AVR napotkałem ciekawy problem. Wielu twórców, jak w poniższym linku

    http://nesl.ee.ucla.edu/projects/sos-beta/api/mica2_2hardware_8h.html#a5

    stosuje bloki zapobiegania przerwaniom nawet w trakcie inicjalizacji podstawowych peryferiów. Znam działanie bloków ATOMIC i znaczenie sei(), cli(), jednak zaskoczyła mnie ta ostrożność. Twórca korzysta tam z
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czy w przypadku odczytu z adc lub generacji odpowiedzi na przykład w protokole modbus jest to konieczne? Jaki jest jeszcze powszechny zakres stosowania takiej atomiczności a AVR? Jakie są możliwe skutki i zalety takiego działania?

    Pozdrawiam, Łukasz.
  • REKLAMA
  • #2 10621478
    kacperpk
    Poziom 14  
    Ogólnie mówiąc blokowanie przerwań stosuje się we fragmentach kodu gdzie gdzie program główny i przerwanie operują na tych samych zasobach.
    Bez przeanalizowania kodu nikt Ci nie poda konkretnej odpowiedzi.
  • REKLAMA
  • #3 10621629
    janbernat
    Poziom 38  
    Krokus22- popatrz na datę.
    To już ma 7 lat.
    Wystarczy że na początku zainicjalizujesz peryferia a potem włączysz przerwania.
  • REKLAMA
  • #4 10670440
    Krokus22
    Poziom 19  
    Witam, dziękuję za odpowiedzi, nurtuje mnie jeszcze jedna sprawa. Załóżmy że przy pomocy ADC albo DIP-Switchy ustawiam sobie adres jakiegoś urządzenia czy określony parametr i wywołuję to tylko raz w czasie całego życia programu. Jak procesor dba o to, aby raz ustawiona w ten sposób zmienna była w tym stanie co przy jej inicjalizacji. Mam na myśli problem następujący: ile lat może pozostać określona dana w pamięci przy włączonym zasilaniu i działającym programie gdy została tylko raz ustawiona. Czytałem o różnych technologiach przechowywania informacji w pamięci jednak nie znalazłem jeszcze odpowiedzi na to pytanie.
  • #5 10670713
    kacperpk
    Poziom 14  
    Zmienne przechowywane są w pamięci SRAM, chyba ze zapisujesz je do EEPROM.
    Dane w pamięci SRAM przy stabilnym zasilaniu i braku innych wpływów zewnętrznych mogą mieć stałą wartość przez cały czas życia scalaka.
    Jednak przy bardzo krytycznych danych musisz się liczyć z tym ze pojedyncze bity danych w pamięci SRAM mogą ulec zmianie.
    W krytycznych sekcjach danych możesz stosować CRC, możesz weryfikować poprawność zapisu danych do SRAM, możesz wprowadzić w programie algorytmy obsługi nie właściwych danych.
    W Twoim przypadku jednak lepiej było by sprawdzać stan DIP-Switchy częściej.
    I oczywiście włączyć WatchDog.
REKLAMA