1
Vývoj / CSP v embedded světě
« kdy: 14. 03. 2021, 23:36:08 »
Čau,
snad nevadí, když nepoložím dotaz, ale (zne|vy)užiju fóra k neformálnímu brainstormingu.
V sousedním vlákně jsme s Idrisem narazili na myšlenku [1], která mi nedá spát.
V krátkosti shrnu:
Aniž bych si udělal nějaký větší research, zkusil jsem si představit, jestli by se dalo pro zábavu naprogramovat v C aspoň malé demo/technology preview takové knihovny. Komunikační primitiva, scheduling nejsou problém, nějaký jednoduchý virtuální stroj si případně taky umím představit. Co mi ale dělá vrásky, jsou procesy. Ty totiž musí být vytvořitelné dynamicky a knihovna jich musí zvládat potenciálně "velké" množství (definici "velké" zatím nechme být, řekněme třeba desítky?) A pokud se chceme bavit o konkurentnosti, každý proces musí mít vlastní stack. Alespoň v nějaké standardní, přímočaré implementaci.
A to už začíná být v embedded problém. Stacky musí být vyhrazené, dostatečně velké a naplno se zaplní jenom občas, navíc typicky ne naráz. Takže dost neefektivní využití paměti. A co je horší - člověk těžko získá nějakou jistou garanci, že stack bude vždy stačit. Pokud vím, obvykle se prostě nastaví "dostatečně velký", což se ale dá udělat třeba u FreeRTOSu s pár statickými tasky ručně, ale ne u předpokládaného hodně dynamického systému se spoustou procesů.
Takže otázka je, jestli vás nenapadá, čím by se daly klasické stacky nahradit, případě jestli by se nedala konkurentnost implementovat nějakým způsobem, který by problémem řídce využité a přesto potenciálně příliš malé paměti netrpěl.
Berte to prosím fakt jako brainstorming, takže žádná myšlenka není příliš pitomá nebo sci-fi, aby nemohla zaznít Jde o srandu a mentální cvičení, raketu tím řídit nehodlám, takže žádná křeč
[1] https://forum.root.cz/index.php?topic=24381.msg346418#msg346418
[2] https://en.wikipedia.org/wiki/Communicating_sequential_processes - tj. program je rozdělený na konkurentní procesy komunikující pomocí kanálů
snad nevadí, když nepoložím dotaz, ale (zne|vy)užiju fóra k neformálnímu brainstormingu.
V sousedním vlákně jsme s Idrisem narazili na myšlenku [1], která mi nedá spát.
V krátkosti shrnu:
- knihovna pro embedded (tj. systémy přibližně velikosti ARM Cortex M0-3, RAM v řádu desítek až menších stovek kB)
- API založené od základu na event-driven přístupu
- programování využívající co nejvíc principy CSP [2]
Aniž bych si udělal nějaký větší research, zkusil jsem si představit, jestli by se dalo pro zábavu naprogramovat v C aspoň malé demo/technology preview takové knihovny. Komunikační primitiva, scheduling nejsou problém, nějaký jednoduchý virtuální stroj si případně taky umím představit. Co mi ale dělá vrásky, jsou procesy. Ty totiž musí být vytvořitelné dynamicky a knihovna jich musí zvládat potenciálně "velké" množství (definici "velké" zatím nechme být, řekněme třeba desítky?) A pokud se chceme bavit o konkurentnosti, každý proces musí mít vlastní stack. Alespoň v nějaké standardní, přímočaré implementaci.
A to už začíná být v embedded problém. Stacky musí být vyhrazené, dostatečně velké a naplno se zaplní jenom občas, navíc typicky ne naráz. Takže dost neefektivní využití paměti. A co je horší - člověk těžko získá nějakou jistou garanci, že stack bude vždy stačit. Pokud vím, obvykle se prostě nastaví "dostatečně velký", což se ale dá udělat třeba u FreeRTOSu s pár statickými tasky ručně, ale ne u předpokládaného hodně dynamického systému se spoustou procesů.
Takže otázka je, jestli vás nenapadá, čím by se daly klasické stacky nahradit, případě jestli by se nedala konkurentnost implementovat nějakým způsobem, který by problémem řídce využité a přesto potenciálně příliš malé paměti netrpěl.
Berte to prosím fakt jako brainstorming, takže žádná myšlenka není příliš pitomá nebo sci-fi, aby nemohla zaznít Jde o srandu a mentální cvičení, raketu tím řídit nehodlám, takže žádná křeč
[1] https://forum.root.cz/index.php?topic=24381.msg346418#msg346418
[2] https://en.wikipedia.org/wiki/Communicating_sequential_processes - tj. program je rozdělený na konkurentní procesy komunikující pomocí kanálů