pomoc s PIC 16..
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?
Pre pridávanie komentárov sa musíte prihlásiť.
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..
Neviem, čo si (v tomto prípade) predstavuješ pod pojmom "skutočný multitasking", ale pre tento procesor sa lepšie hodí nejaký 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.