Callbacky vs. korutiny v C

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Callbacky vs. korutiny v C
« Odpověď #15 kdy: 22. 05. 2017, 09:12:33 »
setjmp a longjmp je možné použít k userspace implementaci korutin.

To už radši getcontext/setcontext, tam nedochází k problémům se sdíleným stackem
To je deprecated a většinou to už je vyřazené z knihovny. Navíc na unixoidních systémech to je pomalé (používají se syscally).


PetrM

Re:Callbacky vs. korutiny v C
« Odpověď #16 kdy: 23. 05. 2017, 08:54:52 »
A nestačí tam prostě portnout FreeRTOS, hlavní vlákno s pollingem a semaforem (bez parametrů) / frontou (s parametry) / eventem (flagy) odblokovat vlákno, co to zpracuje? Proč se furt musí vymýšlet rovnáky na ohybáky?

dustin

Re:Callbacky vs. korutiny v C
« Odpověď #17 kdy: 23. 05. 2017, 09:20:42 »
Přesně to samé jsme před pár dny navrhovali s chibios. Stejně jako FreeRTOS jde jen o sadu maker, funkcí a datových struktur. Žádné přepínání user-space/kernel space se tam samozřejmě neřeší, přesto i na osmibitovém jednočipu nabízí kooperativní či preemptivní vlákna, jednoduchý scheduler (dokonce i tickless pro snížení spotřeby), blokované fronty, kritické sekce, semafory atd. atd. Pro složitější projekt je takový otestovaný "framework" dost velké usnadnění, protože umožňuje snáz modelovat dle reality a vyhýbat se některým hackům.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Callbacky vs. korutiny v C
« Odpověď #18 kdy: 23. 05. 2017, 09:43:07 »
A nestačí tam prostě portnout FreeRTOS, hlavní vlákno s pollingem a semaforem (bez parametrů) / frontou (s parametry) / eventem (flagy) odblokovat vlákno, co to zpracuje? Proč se furt musí vymýšlet rovnáky na ohybáky?
Správa vláken je drahá a semafory dtto. Není-li potřeba preempce, jsou mnohem lepší korutiny. Navíc některé MCU ani podporu vláken nemají.

dustin

Re:Callbacky vs. korutiny v C
« Odpověď #19 kdy: 23. 05. 2017, 09:56:15 »
Navíc některé MCU ani podporu vláken nemají.

Co konkrétně je potřeba v MCU pro správu "vláken", jaká se používají v tenkých "OS" typu FreeRTOS či ChibiOS? Běží to i na AVR v arduinu http://www.chibios.org/dokuwiki/doku.php?id=chibios:product:nil:features

Pro složitější projekty se tenká vrstva takového "OS" hodí.


Re:Callbacky vs. korutiny v C
« Odpověď #20 kdy: 23. 05. 2017, 10:30:51 »
Co konkrétně je potřeba v MCU pro správu "vláken", jaká se používají v tenkých "OS" typu FreeRTOS či ChibiOS? Běží to i na AVR v arduinu http://www.chibios.org/dokuwiki/doku.php?id=chibios:product:nil:features

Pro složitější projekty se tenká vrstva takového "OS" hodí.
Myslim, ze je potreba odlisit vlakna a tasky (abysme vedeli, o cem se vlastne bavime). Neznam vnitrnosti ChibiOSu pro AVR, ale mam podezreni, ze bude fungovat jenom na principu casovace - tj. zadam si, ze za dve sekundy chci spustit nejaky task a on se mi za dve sekundy spusti, pokud v tu dobu nebezi jiny task.

Docela pochybuju o tom, ze by se na AVR dal udelat "plnotucny" hard realtime system s preempci, ale mozna se mylim.

dustin

Re:Callbacky vs. korutiny v C
« Odpověď #21 kdy: 23. 05. 2017, 10:52:55 »
ChibiOS má dvě verze - RT a NIL srovnání http://www.chibios.org/dokuwiki/doku.php?id=chibios:articles:rt_vs_nil

NIL je vhodná i pro AVR a neumí round-robin preemption vláken stejné priority (tj. sledování spotřebovaného time slicu a přepnutí při zjištění jeho vypršení). Umí preemption vláken různých priorit. Tj. když se probudí vlákno vyšší priority interruptem od časovače nebo periférie, uloží stav stávajícího vlákna a přepne na jiné s vyšší prioritou. Samozřejmě se musí hlídat paměť. NIL neumí dynamicky vytvářená vlákna.

Verze RT běží výborně např. na STM32 (používám čínský klon maple mini STM32F103 za 3 dolary) a umí vše z toho.

Pěkný popis scheduleru verze RT je např. http://www.playembedded.org/blog/en/2016/10/29/explanation-multithreading-chibios/

Re:Callbacky vs. korutiny v C
« Odpověď #22 kdy: 23. 05. 2017, 10:55:40 »
NIL je vhodná i pro AVR a neumí round-robin preemption vláken stejné priority (tj. sledování spotřebovaného time slicu a přepnutí při zjištění jeho vypršení). Umí preemption vláken různých priorit. Tj. když se probudí vlákno vyšší priority interruptem od časovače nebo periférie, uloží stav stávajícího vlákna a přepne na jiné s vyšší prioritou. Samozřejmě se musí hlídat paměť. NIL neumí dynamicky vytvářená vlákna.
Aha, tak to je lepsi, nez jsem myslel - omezeni jsou tam porad velky, ale na AVR je to super vysledek.

Diky moc za doplneni a linky!

dustin

Re:Callbacky vs. korutiny v C
« Odpověď #23 kdy: 23. 05. 2017, 11:45:58 »
Na AVR je NIL verze údajně plně funknční (netestoval jsem), ale pokud stojí deska s 32bitem na 72MHz se 128kB flešky a 20kB RAM 3 dolary, nemyslím si, že by pro složitější projekt dávala kombinace ořezané NIL + slaboučké AVR smysl. Programuje se obojí přes vestavěné USB bez potřeby dalšího hardware.

Jen pro debugging v eclipse je potřeba USB STLink za 2 dolary, ale to jsem zatím ještě nezkoušel.

Samozřejmě pro jednoduchý projekt je daleko rychlejší apt-get install arduino a za pár minut ledka bliká. Prvotní rozchození chibios v eclipse + naučit se nahrávat na desku mi trvalo pěkných pár večerů.


dustin

Re:Callbacky vs. korutiny v C
« Odpověď #24 kdy: 23. 05. 2017, 11:50:30 »
Jinak to arduino IDE s nahranou knihovnou STM32 desek (projekt stm32duino) jde pro to maple mini použít úplně v pohodě včetně uploadu na desku, samozřejmě je to klasické tupé arduino setup + loop + chudé IDE.