pomoc s PIC 16..

Sekcia: Programovanie 03.03.2010 | 23:03
Grawp   Návštevník
Potreboval by som pomoct.
Mam PIC 16F877A a snazim sa pren navrhnut multitasking v asm.

Casovac TMR0 generuje kazdych x ms prerusenie v ktorom sa ulozia registre a PC aktualneho tasku a nasledne ma dalsi algortimus vybrat niektory z pozastavenych procesov. Problem je ten ze v STACKU je posledna pozicia v ktorej prerusenie nastalo a ja nasledne manualne skacem na poziciu niektoreho z procesov, nevraciam sa cez RETFIE, a adresa v ktorej prerusenie nastalo zostava v STACKu a robi tam bordel...

Mate niekto navrch ako to vyriesit? nieco ine okrem toho ze vyhodit sku*veny PIC von oknom a kupit najake AVR alebo AMR, pripadne nieco s FPGA?
    • Re: pomoc s PIC 16.. 04.03.2010 | 19:52
      Avatar Marián Sova Ubuntu 10.10  Používateľ
      A nemôžeš ručne upraviť ukazateľ stacku?
      Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
      • Re: pomoc s PIC 16.. 05.03.2010 | 03:03
        Grawp   Návštevník
        Pri PIC nie. Teda neviem ako. Datasheets tvrdia ze s tym nepohnem, takze som asi v haji, pokial chcem plnohodnotny multitasking.
    • Re: pomoc s PIC 16.. 05.03.2010 | 12:44
      filodendron   Návštevník
      Do STACKu sa zapisujú adresy stále dookola. Pokiaľ bude počet RET menší než počet CALL, tak by sa mali nepoužité návratové adresy akoby zahodiť, a preto by takéto riešenie nemalo mať vplyv na vykonávanie programu. Napriek tomu je isté, že sa to celé dá napísať "profesionálnejšie"...
      • Re: pomoc s PIC 16.. 05.03.2010 | 14:12
        Grawp   Návštevník
        Povedzme ze bezi nejaka task, ta robi rozne call volania na rutiny a z nich sa vracia cez return. Ak teraz do toho pride prerusenie napr. z UARTu .. aktualny PC sa ulozi do stacku... vykona sa prerusenie a z prerusenia sa vrati cez retfie (to iste co return v podstate na adresu kde prerusenie nastalo. Stack je taky ako predtym... prerusenie moze nastat hocikde.

        Ale ja sa z prerusenia co bude sluzit na multitask nebudem vracat cez retfie/return ale manualnym upravenim PC.
        Povedzme ze bude bezat len jedna task... ta si pocas svojho spravi CALL subroutine.. nasledne pride prerusenie... to vidi ze je tem len jedna task.... tak skoci naspat do miesta kde bolo zavolane (ale manualne, niez cez retfie). program sa obnovi v prebiehajuce subroutine... a ked dojde na koniec a narazi na return tak to cele havaruje lebo sa nevrati na miesto odkial bola subroutine volana .. ale na poslednu adresu v stacku ktora bude adresa posledneho prerusenia...

        Nevidim moznost ako to spravit ak chces mat skutocny multitasking..
        • Re: pomoc s PIC 16.. 05.03.2010 | 15:34
          filodendron   Návštevník
          Tento PIC vie ku zásobníku pristupovať iba cez inštrukcie typu CALL a RET. Nemá iný spôsob, ako sa dozvedieť návratovú adresu. Bez použitia RET sa nedá vrátiť z prerušenia presne tam, kde bolo vyvolané. Dá sa buď skočiť na nejakú pevnú adresu, prípadne si ju predtým prečítať z nejakej premennej. Budeš mať však menej problémov, keď sa vyhneš takémuto štýlu programovania.
          Neviem, čo si (v tomto prípade) predstavuješ pod pojmom "skutočný multitasking", ale pre tento procesor sa lepšie hodí nejaký RTOS.
          • Re: pomoc s PIC 16.. 05.03.2010 | 19:35
            Grawp   Návštevník
            A viete mi poradit nejaky opensource RTOS pre dany PIC?
            • Re: pomoc s PIC 16.. 05.03.2010 | 23:57
              filodendron   Návštevník
              Ja nie, ale Google by mohol...
              • Re: pomoc s PIC 16.. 07.03.2010 | 12:18
                Grawp   Návštevník
                Google som pouzil skor nez som vobec sem hodil prvy post. Ziadny opensource RTOS pre PIC som nenasiel. Tak som chcel spravit nieco vlastne, a zasekol som sa na tom ze neurpravim stack.
    • Re: pomoc s PIC 16.. 07.03.2010 | 16:35
      Grawp   Návštevník
      Problem som vyriesil tym ze prejdem na ine MCU. PICy co mam samozrejme najdu svoje vyuzitie, ale nie RTOS.
      Mozete este skusit poradit s cim zacat, ak mate nejake skusenosti. Chcem aby tam bezal FreeRTOS a <10€. A vyuzitie? Na hrátky s ASM a C, projekty typu wireless meterologicka stanica a podobne kraviny...
      Ale ako som povedal, hlavny problem som 'vyriesil' , tym ze som zistil ze riesenie nema.
      • Re: pomoc s PIC 16.. 07.03.2010 | 16:53
        Avatar Marián Sova Ubuntu 10.10  Používateľ
        Ja osobne odporúčam AVR. Za nízku cenu obsahuje veľa HW (AD prevodník,PWM,IIC,SPI). Dokonca nová rada ATxmega má toho ešte viac a nestojí o moc vyše ako klasická ATmega. Ale RTOS som tam neskúšal. Ale podľa googlu by tam ísť mal.
        Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk