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

Bascom-Atmega16- skok do procedury podczas obsługi przerwan

Clay 28 Maj 2009 17:11 1578 6
REKLAMA
  • #1 6586221
    Clay
    Poziom 12  
    Witam
    Chcialbym się dowiedzieć czy podczas wykonywania podprogramu obsługi przerwania możliwy jest skok do procedury.
    Czyli np. takie coś w środku podprogramu obsługi przerwania:

    
        If Nr_menu = 0 Then
           Call Zmien_10(t1 , 50 )
        Elseif Nr_menu = 1 Or Nr_menu = 5 Then
           Call Zmien_10(vout , 60 )
        Elseif Nr_menu = 2 Or Nr_menu = 6 Then
           Call Zmien_10(th , 70 )
        Elseif Nr_menu = 3 Or Nr_menu = 7 Then
           Call Zmien_10(tl , 80 )
        Elseif Nr_menu = 4 Then
           Call Zmien_10(tc , 90 )
        End If
    


    Piszę bo nie moge znalezc nigdzie inf. o tym:)
    Dodam ze normalnie moja procedura "Zmien_10" działa. Natomiast nic sie nie dzieje przy wywolaniu jej podczas obslugi przerwania.

    Pytanie dot. Bascom - Atmega16.
  • REKLAMA
  • #2 6586313
    Elektrooonik
    Poziom 29  
    Jest możliwy, trzeba tylko dbać o to aby nie przepełnić stosu.
  • REKLAMA
  • Pomocny post
    #3 6586442
    dawid512
    Poziom 32  
    Wydaję mi się że jest to możliwe ale procedura umieszczona w podprogramie powinna być bardzo krótka. Pewniejszym sposobem jest stosowanie flagi w przerwaniu a w pętli głównej przetwarzanie jej.
  • #4 6586532
    Clay
    Poziom 12  
    Dzieki za odpowiedzi.
    Czyli procedura powinna byc krótka zeby nie przepelnic stosu.
    Zminimalizowalem ją w celach testowych i wygląda tak:

    
    Sub Zmien_10(byref Dana As Byte , Byval Maximum As Byte)
    
    While Przycisk_Plus = 0                                  
         Toggle Porta.1                      'tutaj sobie diode podlaczylem
          Incr Dana
         Gosub Wypisz_menu
         Waitms 300
    Wend
    
    End Sub
    


    Niestety zwiększa mi zmienną "Dana" tylko raz natomiast dioda mruga co 300ms. Czy to nadal moze byc wina przepelnionego stosu ? Czy moze to powodować zbyt duzy podprogram "Wypisz_menu" ?
  • REKLAMA
  • Pomocny post
    #5 6586560
    Elektrooonik
    Poziom 29  
    Clay napisał:
    Dzieki za odpowiedzi.
    Czyli procedura powinna byc krótka zeby nie przepelnic stosu.

    Nie do końca, poczytaj co to jest stos i nie będziesz zadawał takich pytań.
    Procedura nie musi być wcale krótka, jeśli wiesz jak mikrokontroler wykonuje Twój program i jesteś świadomy tego co piszesz to nie ma przeciwskazań aby używać dowolnie dużych procedur, a czy jest to zgodne ze sztuką programowania to już inna sprawa, ale działać będzie :)
  • REKLAMA
  • #7 6586947
    Clay
    Poziom 12  
    Cytat:

    Nie do końca, poczytaj co to jest stos i nie będziesz zadawał takich pytań.


    Wiem co to jest stos :P Rzeczywiscie troche glupote napisalem. Chodzilo mi o to zeby w tej procedurze np. nie zapelniac stosu bezmyslnie np. zmienna lokalną <a tak mialem>.

    Juz po problemie - zrobilem tak jak mi poradzil dawid512 - w przerwaniu zmieniam wartosc flagi :)

    Dzieki wszystkim za pomoc.

    PS. ZbeeGin - to moj drugi "wiekszy" program w zyciu wiec nie mam jeszcze takiego obycia :P Ale twoje uwagi tez mi pomogly bo pomyslalem o "optymalizacji" przerwania - praktycznie tylko ustawia flage na 1 :P
REKLAMA