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

AVRStudio - kod w C przerwanie w asm

fred117 22 Gru 2008 10:49 1284 5
  • #1 5889148
    fred117
    Poziom 21  
    Witam wszystkich!
    Koledzy i koleżanki, mam następujący problem:
    Cały kod chciałbym napisać w C oprócz obsługi przerwań które z racji wymaganej dużej prędkości będę pisał w asm.
    I tu pojawia się moje pytanie. Jak połączyć kod C z obsługą przerwania w asm??

    Próbowałem skoku z dyrektywą .org- kompilator ignoruje.
    Funkcja asm nie może mieć w nazwie ().Tak więc nazwa ISR(ADC_vect) odpada.
    Jedynym działającym rozwiązaniem jest wywołanie z funkcji ISR(ADC_vect) funkcji asm. Nie jest to jednak rozwiązanie bo sama funkcja ISR robi dużo POPów i PUSHy co znacznie spowalnia obsługę przerwania.

    Pozdrawiam
  • Pomocny post
    #2 5889251
    Freddie Chopin
    Specjalista - Mikrokontrolery
    funkcje w assemblerze nazwac __vector_XX gdzie XX to jedna lub dwie cyfry. numerek ten jest numerem wektora przerwan, przy czym reset ma numer 0

    pozatym odpowiedni zestaw parametrow przy owym ISR pozwoli usunac wszelkie opcje dodawane przez kompilator (atrybut 'naked'). do tego mozna sobie wtedy przerwanie napisac jako wstawke asm.

    4\/3!!
  • #3 5889279
    BoskiDialer
    Poziom 34  
    Ja w takim przypadku dodaję moduł w asemblerze.
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    ; przepełnienie timera0 - nic (wybudzanie)
    .global SIG_OVERFLOW0
    SIG_OVERFLOW0:
    	; tu można wstawić kod
    	reti

    Szablonowo wygląda to tak mniej więcej tak.
  • #4 5890035
    fred117
    Poziom 21  
    Dziękuję bardzo :D
    a czy jest jakiś sposób żeby wymusić dany fragment kodu w danym miejscu pamięci flash??
    Pod "czystym" assemblerem wystarczyło ".org" a czy w takim miksie asm+C jest na to jakiś przepis ??
  • Pomocny post
    #5 5890135
    Freddie Chopin
    Specjalista - Mikrokontrolery
    mozna funkcji przypisac atrybut przynaleznosci do jakiejs sekcji, a nastepnie sobie taka sekcje zdefiniowac w opcjach linkera.

    http://www.ohse.de/uwe/articles/gcc-attributes.html#func

    ogolnie zas nie ma raczej potrzeby zeby kod umieszczac pod konkretnymi adresami - prosta droga do klopotow. wektory przerwan umieszczone beda tam gdzie trzeba, wiec o to sie martwic nie trzeba.

    4\/3!!
  • #6 5890206
    fred117
    Poziom 21  
    Dzięki wielkie
    W sumie to wszystko co chciałem wiedzieć.
    Zamykam temat
REKLAMA