03-07-2017, 05:13 PM
(03-06-2017, 08:15 PM)Macola Wrote: Neki banalizovan primer jednostavnog i ekstremno brzog multitaskinga:
/*sklonio kod*/
P.S.
Bare metal ili ti "plekano" pisanje, što bi rekle babe :-)
Taj rad gosn Macola!!
Samo da dodam iz mog ugla, i na osnovu najskupljeg iskustva, cesto mi je problem bio da se prisetim sta sam pametno programirao pre x meseci kada je potrebno nesto cacnuti u kodu popraviti - promeniti. Zato se sada trudim da pisem sto deskirptivnije pa makar i na ustrb brzine iako je to protivno nekim iskonskim principima koji su me vodili. Msm majao sam se po asembleru ranije, ne znam ni sam sto, i koliko dugo...
Tako da npr drzim svaku FSM u strukturi gde su neka od polja: trenutno stanje, sledece stanje, brojac vremena trenutnog stanja, onda niz komandi (obicno svaka FSM tj da kazemo task u ovoj konotaciji. mi reaguje na evente: time update, start, stop, onda akoje u pitanju GUI to su razni buttoni, i sta god treba u opstem slucaju a zbog sinhronizacije masina neretko zafali da svaka ima svoj queue sa komandama upucenim ka njoj - zna da pomogne onoliko...) Sve to stoji u strukturi.
Onda samu funkciju podelim, pa po prioritetima na pocetku npr obradjujem vreme (switch- case struktura) pa iza toga nova switch -case struktura sa istim ponovljenim stanjima (neoptimalno, ali lepo za citanje i snalazenje posle mnogo vremena zaboravljanja) sa procesiranjem events-a, pa onda npr obrada gresaka..
I na kraju tranzicija i akcije na tranzicije: if (Fsm.currentState !=Fsm.nextState) { switch (Fsm.nextState)...}
Nek se kompajler snalazi ako hoce i zna da optimizuje; bitnije mi je da mogu ja da se snadjem, kazem, posle puno vremena provedenih u nekim drugim projektima i drugim kodovima.
Sad dal je ova realizacija milova ili murova to se zaboravilo i kad je trebalo da se zna nije se znalo verovatno; ja sam zapoceo kao (analogni) elektronicar :
Ali iskustveno ovo zavrsava 99% poslova.
Inace offtopic je ne? mozda bi vredelo da otvorimo neku novu temu radi razmene best practice...