CSP v embedded světě

Re:CSP v embedded světě
« Odpověď #60 kdy: 17. 03. 2021, 22:40:46 »
Citace od: Idris kdy 17. 03. 2021, 21:50:08
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 »
Citace od: RDa kdy 15. 03. 2021, 02:43:22
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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #62 kdy: 24. 03. 2021, 00:10:41 »
Citace od: Mirek Prýmek kdy 23. 03. 2021, 23:37:23
Citace od: RDa kdy 15. 03. 2021, 02:43:22
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 »
Citace od: Idris kdy 24. 03. 2021, 00:10:41
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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #64 kdy: 24. 03. 2021, 00:52:52 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 00:13:15
Citace od: Idris kdy 24. 03. 2021, 00:10:41
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 »
Citace od: Idris kdy 24. 03. 2021, 00:52:52
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?

Citace od: Idris kdy 24. 03. 2021, 00:52:52
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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #66 kdy: 24. 03. 2021, 22:35:51 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 00:58:01
Citace od: Idris kdy 24. 03. 2021, 00:52:52
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 »
Citace od: Idris kdy 24. 03. 2021, 22:35:51
Bez explicitního free.
A jak bys to delal v cistym C?

Idris

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #68 kdy: 24. 03. 2021, 22:41:35 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 00:13:15
Citace od: Idris kdy 24. 03. 2021, 00:10:41
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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #69 kdy: 24. 03. 2021, 22:45:31 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 22:37:09
Citace od: Idris kdy 24. 03. 2021, 22:35:51
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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #70 kdy: 24. 03. 2021, 23:07:22 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 22:37:09
Citace od: Idris kdy 24. 03. 2021, 22:35:51
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:

// 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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #72 kdy: 24. 03. 2021, 23:23:43 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 23:21:10
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

  • *****
  • 2 286
Re:CSP v embedded světě
« Odpověď #73 kdy: 24. 03. 2021, 23:28:04 »
Citace od: Mirek Prýmek kdy 24. 03. 2021, 23:21:10
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 »
Citace od: Idris kdy 24. 03. 2021, 23:28: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.