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

Obsługa przerwania w programie wieloplikowym kompilator GCC

INTOUCH 11 Sie 2011 19:08 1499 11
  • #1 9815541
    INTOUCH
    Poziom 30  
    Witam
    Czy i jak można umieścić procedurę obsługi przerwania w innym pliku niż plik z główną funkcją programu "main(){}".
    procedura obsługi przerwania będzie mi potrzebna do obsługi 4 przycisków.
    Przerwanie będzie od Timera0.
    Procedurę obsługi przerwania chcę umieścić w pliku w którym się znajduje funkcja obsługi przycisków. Czy jeśli umieszczę procedurę obsługi przerwania w innym pliku program będzie mi się zachowywał prawidłowo.
  • #2 9815552
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #3 9815645
    tmf
    VIP Zasłużony dla elektroda
    Dopóki symbole związane z funkcjami są globalne (co zapewniają odpowiednie atrybuty lub umieszczenie ich w nagłówkach) nie ma znaczenia, gdzie znajduje się ciało funkcji. Zresztą tak naprawdę dla kompilatora nie ma znaczenia nawet to czy symbol jest globalny, czy nie, to dopiero linker będzie się rzucał o to, że czegoś nie może znaleźć. AVR-libc zapewnia że wszystkie symbole związane z przerwaniami są słabymi symbolami globalnymi (atrybut weak), tak więc miejsce zdefiniowania funkcji obsługi przerwania jest bez znaczenia. Ale z tego powodu w razie wątpliwości warto przejrzeć wygenerowany plik lss i znajdującą się w nim na początku tabelę wektorów przerwań w celu upewnienia się, że dany wektor został prawidłowo powiązany z pożądaną funkcją obsługi przerwania. Zauważ, że np. pomyłka w jej nazwie wygeneruje ostrzeżenie, ale nic po za tym. Z kolei zmieniona nazwa uniemożliwi prawidłowe powiązanie z wektorem przerwania, który będzie wskazywał na predefiniowaną funkcję w AVR-libc. Więc można się czasami przejechać.
  • #4 9817641
    INTOUCH
    Poziom 30  
    Jeszcze jedno pytanie z innej beczki.
    W DS Atmegi 32 napisano że TC0 i TC1 korzystają z tego samego preserska ale mogą mieć rożny podział.
    Czyli jeżeli np dla TC0 ustalę podział 1024 a dla TC1 podział 8 to nie będzie konfliktu?
    TC1 używam do PWM tryb 14 a TC0 będzie pracował jako zwykły licznik.
  • #6 9818600
    INTOUCH
    Poziom 30  
    Chyba się nie zrozumieliśmy.
    Chodzi mi o preskaler i podział preskalera dla dwóch rożnych timerów.
    TC0 i TC1 korzystają z tego samego preserska.

    Chodzi mi o to czy dwa timery będą pracowały z rożnymi "prędkościami" właściwymi dla ustawionych preskalerów TC0 i TC1 w przypadku gdy podział preskalera dla TC0 jest iny od TC1.
  • #7 9818685
    dondu
    Moderator na urlopie...
    INTOUCH napisał:
    Chyba się nie zrozumieliśmy.
    Chodzi mi o preskaler i podział preskalera dla dwóch rożnych timerów.
    TC0 i TC1 korzystają z tego samego preserska.

    Chodzi mi o to czy dwa timery będą pracowały z rożnymi "prędkościami" właściwymi dla ustawionych preskalerów TC0 i TC1 w przypadku gdy podział preskalera dla TC0 jest iny od TC1.

    Podałem Ci nr rysunku i stronę. Teraz wklejam, więc przyglądnij się i odpowiedz sobie na swoje pytanie:

    Obsługa przerwania w programie wieloplikowym kompilator GCC
  • #8 9819260
    INTOUCH
    Poziom 30  
    nie miałem tego rysunku na tej stronie DS dla ATMEGI 32
    dzięki już wszystko mi się wyjaśniło.
    Działanie będzie bez kolizyjne.
  • #10 9819287
    INTOUCH
    Poziom 30  
    jak możesz to podeślij link do tego DS.
  • #12 9819303
    INTOUCH
    Poziom 30  
    Widocznie korzystałem z jakiegoś starego DS Gdzie jest jakieś 270 stron
    dzięki temat zamykam
REKLAMA