CSP v embedded světě

Re:CSP v embedded světě
« Odpověď #60 kdy: 17. 03. 2021, 22:40:46 »
Doporučuju používat objekty jako v CoreFoundation, bude to bezpečnější.
Objekty mi do domu nesmí :)


Re:CSP v embedded světě
« Odpověď #61 kdy: 23. 03. 2021, 23:37:23 »
Na cem jedete, ja chci taky takovej caj :P
A ještě mi pořád nedošel!

"Migrující tasky" (kind of...) jsou na světě :)

https://youtu.be/GMtUod8J4GA

Zdroják: https://gist.github.com/mprymek/1b93972b71b8d3a59e143819356ea605

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #62 kdy: 24. 03. 2021, 00:10:41 »
Na cem jedete, ja chci taky takovej caj :P
A ještě mi pořád nedošel!

"Migrující tasky" (kind of...) jsou na světě :)

https://youtu.be/GMtUod8J4GA

Zdroják: https://gist.github.com/mprymek/1b93972b71b8d3a59e143819356ea605
Hm, tak teď už to GCD nepřipomíná...

Re:CSP v embedded světě
« Odpověď #63 kdy: 24. 03. 2021, 00:13:15 »
Hm, tak teď už to GCD nepřipomíná...
Na API CSP se nic nezměnilo :)

A je tam ten select, co ses na něj ptal. Nakonec jsem ho implementoval jednoduše jako skupinu tasků. Spustí se jenom jeden, ale vymažou se z tabulky všechny.

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #64 kdy: 24. 03. 2021, 00:52:52 »
Hm, tak teď už to GCD nepřipomíná...
Na API CSP se nic nezměnilo :)

A je tam ten select, co ses na něj ptal. Nakonec jsem ho implementoval jednoduše jako skupinu tasků. Spustí se jenom jeden, ale vymažou se z tabulky všechny.
Taky správa paměti by šla řešit elegantně, když už tam je tolik struktur, klidně by mohla alokace být transparentní.

Jak se přepíná kontext?


Re:CSP v embedded světě
« Odpověď #65 kdy: 24. 03. 2021, 00:58:01 »
Taky správa paměti by šla řešit elegantně, když už tam je tolik struktur, klidně by mohla alokace být transparentní.
Co je transparentní alokace?

Jak se přepíná kontext?
Je to ten RTC scheduler, tj. kontext se přepne tím, že funkce doběhne. Např. can_blinker_send se spustí po tom, co jsou na kanálu k dispozici data (dostane je v chan_data_t data). Pomocí csp_send() na konci vytváří nový task, který scheduler spustí "někdy příště".

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #66 kdy: 24. 03. 2021, 22:35:51 »
Taky správa paměti by šla řešit elegantně, když už tam je tolik struktur, klidně by mohla alokace být transparentní.
Co je transparentní alokace?
Bez explicitního free.

Re:CSP v embedded světě
« Odpověď #67 kdy: 24. 03. 2021, 22:37:09 »
Bez explicitního free.
A jak bys to delal v cistym C?

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #68 kdy: 24. 03. 2021, 22:41:35 »
Hm, tak teď už to GCD nepřipomíná...
A je tam ten select, co ses na něj ptal.
Jak na to tak koukám, tak pro čisté C by se na embedded hodilo něco jako kqueue — kanály vyžadují extra syntax (nebo hnusné workaroundy).

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #69 kdy: 24. 03. 2021, 22:45:31 »
Bez explicitního free.
A jak bys to delal v cistym C?
Jako jiné knihovny v čistém C, použít cleanup a někde bokem si držet informace o strukturách (to kvůli polymorfismu při úklidu). Na embedded bych tedy především nealokoval nic na haldě, ale obecně se používají v sofistikovaných knihovnách právě ukazatele na “typy”. Je to taková vyšší dívčí céčka, třeba CoreFoundation je dobrý příklad.

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #70 kdy: 24. 03. 2021, 23:07:22 »
Bez explicitního free.
A jak bys to delal v cistym C?
Už nemůžu upravit tu předchozí odpověď, tak tady jako příklad:
Kód: [Vybrat]
// nějaký kód (vytvoř třeba RSA klíče)
{
autofreed ch = channel_create();
// dej někomu kanál
// hoď klíče do kanálu
}
// kanál byl uvolněn
Takhle se dá psát v čistém C bez explicitních alokací, zrovna na embedded, kde typicky není nějaká velká standardní knihovna, to je dobrý fit. Stačí jedno makro s jedním atributem. Dost teda v GCC chybí bloky (aka uzávěry), ale ty stejně vyžadují runtime, což zabírá místo, což v embedded nemáme rádi :)

Re:CSP v embedded světě
« Odpověď #71 kdy: 24. 03. 2021, 23:21:10 »
Tohle ale nejde pouzit (pokud ti spravne rozumim). Alokuje se v jine funkci nez dealokuje.

Kanaly se nealokuji dynamicky, to neni potreba, ty jsou alokovane staticky. Dynamicky se alokuji zpravy - prave proto, ze je potreba je na jednom miste vytvorit a na jinem pouzit. Pokud bych se moc chtel te dynamicke alokaci vyhnout, stacilo by pouzit doublebuffer (protoze kanal ma kapacitu 1). Neudelal jsem to zamerne, protoze jsem chtel, aby informace proudily striktne ve smeru channelu, ne nejakym postrannim "neviditelnym" kanalem opacne.

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #72 kdy: 24. 03. 2021, 23:23:43 »
Tohle ale nejde pouzit (pokud ti spravne rozumim). Alokuje se v jine funkci nez dealokuje.
Jde to použít, když si někde držíš RC (jako třeba Rust). Případně si můžeš implementovat move, ale to už je vyšší vyšší dívčí.

Idris

  • *****
  • 1 400
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #73 kdy: 24. 03. 2021, 23:28:04 »
Kanaly se nealokuji dynamicky, to neni potreba, ty jsou alokovane staticky. Dynamicky se alokuji zpravy - prave proto, ze je potreba je na jednom miste vytvorit a na jinem pouzit. Pokud bych se moc chtel te dynamicke alokaci vyhnout, stacilo by pouzit doublebuffer (protoze kanal ma kapacitu 1). Neudelal jsem to zamerne, protoze jsem chtel, aby informace proudily striktne ve smeru channelu, ne nejakym postrannim "neviditelnym" kanalem opacne.
To byl jen příklad. Zrovna u těch zpráv to dává ještě větší smysl. Teď už se bavíme o detailech, ale pro někoho, kdo si s Picem jen hraje a jinak moc vývojář není, to může být docela velký rozdíl. A v produkci je to bezpečnější.

Re:CSP v embedded světě
« Odpověď #74 kdy: 24. 03. 2021, 23:34:04 »
ale pro někoho, kdo si s Picem jen hraje a jinak moc vývojář není, to může být docela velký rozdíl
Abysme si rozumeli: nesnazim se udelat to "Arduino done right". Chci udelat demo CSP na MCU. Neni to urceno lamam a jelikoz se alokuje na jednom jasne danem miste, dealokuje na jinem jasne danem miste a oboje je z definice synchronizovany, nedava mi smysl tam vymyslet jekykoli vyfikundance, ktery by kod jenom nesmyslne komplikovaly.