Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

PIC16Fxxx ja interrupti sisenemine programmimälu teiselt leheküljelt

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    #16
    Vs: PIC16Fxxx ja interrupti sisenemine programmimälu teiselt leheküljelt

    Uus probleem - ISR'i lõpus asuv ,,return" tõstab program counter'i ka alamprogrammist välja. Kui proovisin ISR'i koodi kopeerida mälusse alates aadressist 0004, kirjutas tavalise veateate (,,could not fit into absolute section").

    EDIT: õnneks vist siiski valehäire, üks ,,goto $+4" viib mingil põhjusel aadressilt 757 otse aadressile 7.
    viimati muutis kasutaja 6p45s; 30 m 2010, 23:21.
    Hoiatus - muudan oma postituse sisu kuni 30 minuti vältel pärast postitamist.

    Comment


      #17
      interrupt

      Mina näiteks ei kasuta siiani kunagi interrupte, kasutan pollingut ja pole kunagi seda laadi probleeme.
      Äkki on asi stackis kinni. Kuldne reegel on, et ei tohi kunagi call olla ilma returnita, ei tohi saata kuskile goto ja siis call -goto jne. Raudne loogika peab olema .
      Saadad call-iga kuskile ja teed vahepealt goto, aga see protsessor ootab returni, aga seda ei tulegi, stack level on miski 8 suunamist ja jookseb kinni, teeb endale restardi ja oled loll valmis, mitte midagi aru ei saa.
      Interrupti asemel saab kasutada pollingut, see on siis vahepeal miski koha kontrollimine perioodiliselt.

      Comment


        #18
        Vs: PIC16Fxxx ja interrupti sisenemine programmimälu teiselt leheküljelt

        tehke endale selgeks, mis asi on stack.
        kasutage oshon IDE simulaatorit, ärge valige raudvaraks PIC, mida pole IDE simulaatoris, siis saab ka neid probleeme vältida.

        Comment


          #19
          Vs: interrupt

          Hea kui restardi teeb (veel parem oleks vastav katkestus) aga tavaliselt hüppab PC kes teab kuhu.

          Pollimine interrupti asemel on protsessori töötsüklite raiskamine.

          Comment


            #20
            Vs: interrupt

            Lühike küsimus ahelet. Kas sa oled idioot või mängid idiooti?
            Modelleerimises ja tootmises kehtivad:
            1. Avariikindel vooluring lühistab kõik teised.
            2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

            Comment


              #21
              Vs: interrupt

              Esmalt postitatud ahelet poolt Vaata postitust
              Mina näiteks ei kasuta siiani kunagi interrupte, kasutan pollingut ja pole kunagi seda laadi probleeme.
              Halvasti teed.

              Esmalt postitatud ahelet poolt Vaata postitust
              Äkki on asi stackis kinni. Kuldne reegel on, et ei tohi kunagi call olla ilma returnita, ei tohi saata kuskile goto ja siis call -goto jne
              Lollus. Call ja return - elementaarne (RTOS-id siiski teinekord kasutavad siinkohal trikke, et tööd kiirendada).

              Esmalt postitatud ahelet poolt Vaata postitust
              Raudne loogika peab olema .
              Saadad call-iga kuskile ja teed vahepealt goto, aga see protsessor ootab returni, aga seda ei tulegi.
              Protsessor ei oota midagi. Tema on tuim "kalkulaator".

              Esmalt postitatud ahelet poolt Vaata postitust
              stack level on miski 8 suunamist ja jookseb kinni, teeb endale restardi ja..
              PIC baseline ja midrange ei tee stackoverflow peale restarti.

              Esmalt postitatud ahelet poolt Vaata postitust
              ..loll valmis, mitte midagi aru ei saa.
              Seda küll!

              Esmalt postitatud ahelet poolt Vaata postitust
              Interrupti asemel saab kasutada pollingut, see on siis vahepeal miski koha kontrollimine perioodiliselt.
              Asjatundmatus. Katkestused ongi kasutamiseks mõeldud.

              Esmalt postitatud ahelet poolt Vaata postitust
              tehke endale selgeks, mis asi on stack.
              kasutage oshon IDE simulaatorit, ärge valige raudvaraks PIC, mida pole IDE simulaatoris, siis saab ka neid probleeme vältida.
              Oshon simu on asjalik. MPLABis on ka simulator - täitsa toimib (8.x versioooni pean silmas). Tõsi ta on PIC kuni 18 on pisut küürakas.. ajale jalgu jäänud.

              Murphy kommentaar tundub kohane.
              viimati muutis kasutaja qratman; 04 m 2010, 20:22.

              Comment


                #22
                Vs: interrupt

                Panin korraks h'0004' ,,call ISR" tagasi (Ahelet mainitud ,,call-return"-paaride tingimus hakkas kripeldama) - katkestuse tekkimisel pandi ka ISR-i algusaadress stack-i ja pärast ,,return"-i sattus PC uuesti aadressile h'0005' ning ISR-i läbiti kaks korda järjest. Järeldus - katkestuse tekkimine on ,,call"-käsu eest ja ,,return" ISR-i lõpus selle paariline. Muidu oleks ilmselt kiiremini olukorrast aru saanud, kuid kuna TMR2 järel oli veel 1/16 postscaler, tekkis väike segadus T2IF-lipuga.

                Polling on muidu tore asi, kuid teatud juhul väga ebaefektiivne. Üks näide - pikk põhiprogrammi tsükkel ja andmevoo vastuvõtt. Kui piisavalt kiiresti ei reageerita, tekib vastuvõtupuhvri ületäide, kui reageeritakse, tegelebki MCU põhiliselt pollimisega.
                Hoiatus - muudan oma postituse sisu kuni 30 minuti vältel pärast postitamist.

                Comment


                  #23
                  Vs: interrupt

                  Esmalt postitatud 6p45s poolt Vaata postitust
                  Panin korraks h'0004' ,,call ISR" tagasi (Ahelet mainitud ,,call-return"-paaride tingimus hakkas kripeldama) - katkestuse tekkimisel pandi ka ISR-i algusaadress stack-i ja pärast ,,return"-i sattus PC uuesti aadressile h'0005' ning ISR-i läbiti kaks korda järjest. Järeldus - katkestuse tekkimine on ,,call"-käsu eest ja ,,return" ISR-i lõpus selle paariline.
                  Teiste sõnadega, katkestus on nagu iga teinegi alamprogramm, ainult selle erinevusega et ta kutsutakse mingi sündmuse (vastav lipp hüppab püsti) ilmnemisel välja.

                  RETFIE katkestuse lõpus on "kiirendatud" RETURN ehk ta teeb 2 asja korraga (RETURN ja BSF INTCON,GIE). Kui peale ISR-i katkestusi ei soovita võib ISR lõpus olla RETURN, siis jääbki GIE lipp pikali.

                  CALL teeb "tagaplaanil": "push PC+1 into stack ja stack_pointer+1" ning paariline RETURN: " stack_poninter-1 ning pop PC".
                  Madalama otsa PICidel stack pointerit puutuda ei saa ja PC muutmine on kah ainult osaliselt võimalik (sellest ka koodilehekülgede kammajaa).

                  PIC10F (baseline) on stack kahe astmeline (ehk maksimaalselt kaks call käsku järjest), PIC16F (midrange) 8 astet (PIC16F1xxx (enhanced midrange) 16 astet). Parematel prosedel on stack RAMis ja "lõpmata suur" ning igatpidi muudetav.
                  viimati muutis kasutaja qratman; 05 m 2010, 10:45.

                  Comment

                  Working...
                  X