CSP v embedded světě

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #75 kdy: 24. 03. 2021, 23:53:43 »
Neni to urceno lamam
To je důležitá informace ;D A co alpaky?


Re:CSP v embedded světě
« Odpověď #76 kdy: 25. 03. 2021, 00:09:17 »
To je důležitá informace ;D A co alpaky?
Zadne z techto: https://www.youtube.com/watch?v=Fx4eqvMGv0U :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #77 kdy: 25. 03. 2021, 00:33:34 »
To je důležitá informace ;D A co alpaky?
Zadne z techto: https://www.youtube.com/watch?v=Fx4eqvMGv0U :)
Vikuně jsou pěkný potvory, se nedá spočítat, kolikrát jsem kvůli nim na Altiplanu brzdil. Guanako je o dost inteligentnější a pod kola neskáče.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #78 kdy: 26. 03. 2021, 09:51:27 »
Implementoval jsem na Picu obecné korutiny (fibers), kdyby to někoho zajímalo, můžu ukázat kód (jádro je z nutnosti v asembleru) a vysvětlit. Nad tím už je jednoduché implementovat kanály a podobné zajímavé věci.

Re:CSP v embedded světě
« Odpověď #79 kdy: 26. 03. 2021, 09:52:25 »
Super! Kód určitě ukaž.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #80 kdy: 26. 03. 2021, 11:05:33 »

Ještě mi bude chvilku trvat, než doplním chybějící věci, ale přepínání kontextu už šlape, to je ostatně to nejhorší (protože asm). Korutina:
Kód: [Vybrat]
struct fibre_info {
    void* stack;
    void* stackpos;
    void* retaddr;
};
Spuštění korutiny:
Kód: [Vybrat]
__attribute__((naked)) void detach_fibre_asm(struct fibre_info*, void(*)(void*), void* stack, void* arg) {
    asm(
    "push {r4,r5,r6,r7}\n\t"
    "mov r4, r8\n\t"
    "mov r5, r9\n\t"
    "mov r6, r10\n\t"
    "mov r7, r11\n\t"
    "push {r4,r5,r6,r7}\n\t"
    "mov r4, sp\n\t"
    "str r4, [r0, #4]\n\t"
    "mov r4, lr\n\t"
    "str r4, [r0, #8]\n\t"
    "mov sp, r2\n\t"
    "mov r0, r3\n\t"
    "bx r1"
    );
}
Celkem primitivní, prostě se uloží kontext a přepne stav. Aby to jelo na Cortex-M0 (Pico), musí se šaškovat s registry od r8 nahoru, ale to jsou detaily. Scheduler už naštěstí bude v céčku. Použití:
Kód: [Vybrat]
void fibre(pico_channel_t ch) {
  pico_sleep_ms(1000);
  pico_send(ch, pico_create_string("Bonjour, monde!"));
}

void main() {
  auto ch = pico_create_channel();
  pico_detach(&fibre, ch);
  auto str = pico_receive(ch);
  // do something with str
}
Funkce sleep, send a receive přepínají korutiny, tj. neblokují, ale prostě vrátí řízení scheduleru.

Re:CSP v embedded světě
« Odpověď #81 kdy: 26. 03. 2021, 11:51:32 »
Ta francouzština je tam příšerná, ten kód ani nemá cenu číst ;)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #82 kdy: 26. 03. 2021, 12:01:47 »
Ta francouzština je tam příšerná, ten kód ani nemá cenu číst ;)
Jaká? Předpokládám, že ti zcela uniká rozdíl mezi britskou a americkou angličtinou. Udělals ze sebe debila ;) Au revoir.

Re:CSP v embedded světě
« Odpověď #83 kdy: 26. 03. 2021, 12:08:02 »
Jaká? Předpokládám, že ti zcela uniká rozdíl mezi britskou a americkou angličtinou. Udělals ze sebe debila ;) Au revoir.
"Bonjour, monde!" je britska nebo americka anglictina?

--
Hele, ale vazne: jakej smysl ma implementovat stackful coroutiny? To uz muzu rovnou pouzit FreeRTOS a budu mit batteries included, ne?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #84 kdy: 26. 03. 2021, 12:08:49 »
"Bonjour, monde!" je britska nebo americka anglictina?
Kanadská  :P

Re:CSP v embedded světě
« Odpověď #85 kdy: 26. 03. 2021, 12:13:48 »
Kanadská  :P
V Kanadě se nepoužívají členy?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #86 kdy: 26. 03. 2021, 12:15:21 »
Hele, ale vazne: jakej smysl ma implementovat stackful coroutiny? To uz muzu rovnou pouzit FreeRTOS a budu mit batteries included, ne?
Kolik místa zabere FreeRTOS? Když chci jen CSP a nic dalšího, tak to IMHO smysl má, ale záleží případ od případu. Navíc to je spíš jen for fun (aby to bylo aspoň trochu reálně použitelné, muselo by se pár věcí dopsat/přepsat), na malinkých MCU už jen malloc je na pováženou. Největší smysl je asi didaktický, jak se dělají korutiny (stejné by to bylo i na jiných procesorech) a jak CSP a podobné divnosti.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:CSP v embedded světě
« Odpověď #87 kdy: 26. 03. 2021, 12:18:21 »
Kanadská  :P
V Kanadě se nepoužívají členy?
Imigranti z východní Evropy cpou členy všude a říkají "le bonjour, le monde", proto se na ně všichni koukají spatra.

Re:CSP v embedded světě
« Odpověď #88 kdy: 26. 03. 2021, 12:23:26 »
Kolik místa zabere FreeRTOS? Když chci jen CSP a nic dalšího, tak to IMHO smysl má, ale záleží případ od případu.
Tak FreeRTOS není nic jinýho než funkce, takže záleží, co všechno používáš. Myslím, že když to naimplementuješ rozumně, tak se dostaneš na velmi podobnej objem jako má FreeRTOS, není tam myslím žádnej zásadní důvod, proč by FreeRTOS (nebo jakejkoliv jinej RTOS) měl být třeba řádově větší. Něco samozřejmě s tím RTOSem sežerou abstrakce, ale neočekával bych, že to bude nějak zásadně moc. Ale je to jenom odhad, muselo by se to zkusit (pro Pico myslím ještě FreeRTOS není, ale můžeš si to zkusit třeba pro ten Blue Pill).

Re:CSP v embedded světě
« Odpověď #89 kdy: 26. 03. 2021, 12:24:16 »
Imigranti z východní Evropy cpou členy všude a říkají "le bonjour, le monde", proto se na ně všichni koukají spatra.
To jsem nevěděl, že deník Le Monde vedou imigranti z východní Evropy :)