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

Jak rozpoznać typ procesora AVR (ATmega) w programie?

prokopcio 21 Sie 2014 12:38 1071 3
  • #1 13895397
    prokopcio
    Poziom 29  
    Witam.
    jak w temacie - chciałbym używać jednego programu na różnych procesorach AVR - czy jest możliwe w programie rozpoznanie typu układu (ATmega).
  • Pomocny post
    #2 13895488
    tmf
    VIP Zasłużony dla elektroda
    Zasadniczo w przypadku rodziny ATMega to nie, da się to dla XMEGA. W ATMega można pomyśleć jak problem ominąć analizując obecność/brak określonych rejestrów IO, ilości pamięci itd. Ale sens i tak ma to niewielki ze względu na dosyć chaotycznie rozmieszczenie rejestrów ukł. peryferyjnych w ATMega i olbrzymie różnice pomiędzy poszczególnymi przedstawicielami rodziny. W efekcie, aby ten sam program uruchomił się na innym przedstawicielu ATMega zazwyczaj trzeba go rekompilować, a rekompilując z kolei wiesz na jaki procesor chcesz mieć wsad więc problem się rozwiązuje. Często różnice w przypadku ATMega są na tyle duże (kosmetyczne, np. nazwy rejestrów typuy UDR lub URD0), że prosta rekompilacja też jest niewystarczająca. Stąd też to co chcesz osiągnąć znacznie łatwiej byłoby osiągnąć korzystając z XMEGA, aczkolwiek w praktyce z kolei sens byłby ograniczony.
  • #3 13895524
    prokopcio
    Poziom 29  
    teraz po przemyśleniu całej sprawy okazuje się rzeczywiście jak już nawet rozpoznam układ to programowo strasznie ciężko będzie wszystko ogarnąć - nawet kompilatorowi się to nie spodoba :) ... wymyślę coś innego :).
  • #4 13895762
    vania
    Poziom 24  
    prokopcio napisał:
    teraz po przemyśleniu całej sprawy okazuje się rzeczywiście jak już nawet rozpoznam układ to programowo strasznie ciężko będzie wszystko ogarnąć - nawet kompilatorowi się to nie spodoba :) ... wymyślę coś innego :).

    Można odczytać sygnaturę układu (w ATMEGA2560 tak robię).
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Kiedyś tez miałem pomysł podobny do Twojego. W skrócie:
    - skompilowane dwie wersje programu (pisany w asm) pod dwa różne procesory pod różnymi adresami początkowymi
    - krótki kod który po resecie czyta sygnaturę (lub jej część), ustawia flagę typu procesora (potrzebna do obsługi przerwań) sygnalizującą typ procesora i skacze do głównego kodu
    - w procedurach obsługi przerwań sprawdzana jest flaga typu procesora i wykonywany skok do odpowiedniej procedury obsługi przerwania

    Ostatecznie uznałem to za niepotrzebne komplikowanie sobie życia i nie dokończyłem realizacji tego udziwnienia ;)
REKLAMA