Vícevláknový program
Vícevláknový program
Dobrý den měl bych otázku. Jde v Arduinu IDE aby fungovalo více cyklů zároveň ??
Re: Vícevláknový program
Ne. Paralelní výpočty na jednom jádře možné nejsou.
Jde využít pouze přerušení, které jeden výpočet přeruší, "odskočí" do jiného a pak se zase vrátí do původního.
Jde využít pouze přerušení, které jeden výpočet přeruší, "odskočí" do jiného a pak se zase vrátí do původního.
Re: Vícevláknový program
Ano, jde, jen to neni "uplne naraz", protoze ma jen jedno vlakno, ale "skoro naraz" kdy se mohou z valne casti prekryvat.
Viz napriklad http://robodoupe.cz/2018/drobnicky-006- ... e-klikacu/
http://micro-corner.gilhad.cz/blog/Ardu ... ouse2.html
http://micro-corner.gilhad.cz/blog/Ardu ... ouse3.html
kde "zaroven" bezi cteni klaves a jejich debouncing a "zaroven" bezi nejaky z cyklu, ktery klika mysi a/nebo klavesnici a v principu neni duvod, proc by jich nemelo naraz bezet vyrazne vic (proste se da za sebe vic nezavislych stavovych automatu a kazdy z nich si pobezi sve cykly po svem).
Viz napriklad http://robodoupe.cz/2018/drobnicky-006- ... e-klikacu/
http://micro-corner.gilhad.cz/blog/Ardu ... ouse2.html
http://micro-corner.gilhad.cz/blog/Ardu ... ouse3.html
kde "zaroven" bezi cteni klaves a jejich debouncing a "zaroven" bezi nejaky z cyklu, ktery klika mysi a/nebo klavesnici a v principu neni duvod, proc by jich nemelo naraz bezet vyrazne vic (proste se da za sebe vic nezavislych stavovych automatu a kazdy z nich si pobezi sve cykly po svem).
Re: Vícevláknový program
Mimořádně, Gilhade, nesouhlasím. To je pouze větvení sekvenčního výpočtu, kdy se v každé fázi sice dělá něco jiného, ale jednotlivé fáze se nepočítají v jeden okamžik, nesdílí paměť ani IO.
Program neběží ve více vláknech, což je - dle nadpisu - požadováno.
Chápu, že jsi "zároveň" dal do uvozovek, ale začít odpověď slovy "Ano, jde..." je IMHO matoucí.
Program neběží ve více vláknech, což je - dle nadpisu - požadováno.
Chápu, že jsi "zároveň" dal do uvozovek, ale začít odpověď slovy "Ano, jde..." je IMHO matoucí.
Re: Vícevláknový program
No prostě potřebuji, aby mi běželi 2 nebo více např. cyklů while zároveň. To jde nebo ne??
Re: Vícevláknový program
Nejde ...
... ale ten procesor je tak rychlý, že když vykonává několik po sobě jdoucích funkcí, tak to vypadá jako by to dělal najednou.
... ale ten procesor je tak rychlý, že když vykonává několik po sobě jdoucích funkcí, tak to vypadá jako by to dělal najednou.
Re: Vícevláknový program
Úplně nejlepší asi bude, když nám řekneš, co přesně chceš udělat, čeho chceš těmi souběžnými cykly dosáhnout. Možná existuje i jiné řešení než paralelní výpočet...
Re: Vícevláknový program
@KamilV: To je prave ten rozdil mezi "provadel paralelne vic instrukci naraz" a "fungovalo nekolik cyklu naraz".
To prvni samozrejme nejde, protoze procesor je jednovlaknovy a umi delat jen jednu instrukci v dany okamzik (vcetne preruseni).
To druhe samozrejme jde, pokud se to vhodne napise - muzu mit jeden cyklus (while, for, ci libovolny jiny), co kazde 1.1 sec prepne LEDku mezi sviti/neviti. Druhy, ktery kazde 1.2 sec udela krok motorkem vlajeckou. Treti, ktery ceka libovolne dlouho na stisknuti tlacitka, pak zmeni barvu te LEDky a naledne 0.5 sec. to tlacitko debouncuje. Ctvrty, ktery porad dokola hlaje par taktu z pisnicky. Paty, ktery ... a to vse se deje naraz a nezavisle na sobe (i kdyz se ceka na dodebouncovani tlacitka, tak LEDka blika, motorek krokuje, pisnicka hraje ...). Sdilet jak pamet, tak I/O vetsinou muzou do te miry, ze se jim muze vyplatit ji vuci sobe zamykat, aby se predeslo rizikovym konkurencnim pristupum, napr. do retezcu, ci jinych struktur.
@Kabicek: Co si od tech while cyklu slibujes, ze budou delat - pokud je neumis napsat presne, tak aspon formou komentare - vetsina veci, ktere si zacatecnik od cyklu muze slibovat, lze provadet "naraz", alespon ze se to tak nezavislemu pozorovateli jevi. Naopak malokdy dokaze zacatecnik vymyslet rozumnou situaci, kde by to "prakticky neslo".
To prvni samozrejme nejde, protoze procesor je jednovlaknovy a umi delat jen jednu instrukci v dany okamzik (vcetne preruseni).
To druhe samozrejme jde, pokud se to vhodne napise - muzu mit jeden cyklus (while, for, ci libovolny jiny), co kazde 1.1 sec prepne LEDku mezi sviti/neviti. Druhy, ktery kazde 1.2 sec udela krok motorkem vlajeckou. Treti, ktery ceka libovolne dlouho na stisknuti tlacitka, pak zmeni barvu te LEDky a naledne 0.5 sec. to tlacitko debouncuje. Ctvrty, ktery porad dokola hlaje par taktu z pisnicky. Paty, ktery ... a to vse se deje naraz a nezavisle na sobe (i kdyz se ceka na dodebouncovani tlacitka, tak LEDka blika, motorek krokuje, pisnicka hraje ...). Sdilet jak pamet, tak I/O vetsinou muzou do te miry, ze se jim muze vyplatit ji vuci sobe zamykat, aby se predeslo rizikovym konkurencnim pristupum, napr. do retezcu, ci jinych struktur.
@Kabicek: Co si od tech while cyklu slibujes, ze budou delat - pokud je neumis napsat presne, tak aspon formou komentare - vetsina veci, ktere si zacatecnik od cyklu muze slibovat, lze provadet "naraz", alespon ze se to tak nezavislemu pozorovateli jevi. Naopak malokdy dokaze zacatecnik vymyslet rozumnou situaci, kde by to "prakticky neslo".
Re: Vícevláknový program
Ok tak v příloze posílám program. Snažím se vytvořit asistenta, který bude odpovídat na mé hlasové příkazy. Problém je v tom, že ta deska na rozpoznávání hlasu dokáže uložit až 80 příkazů, ale do recognizeru se dá vložit jen 7. To znamená že jsem si těch více příkazů rozdělil do několika skupin po 7 a mezi nimi přepínám tak, že ty co tam jsou smažu, oni se uloží zpět do paměti a nahraju tam jiné. To dělám pomocí vytvořené funkce (function). Jak tam mám ten cyklus while, tak to hledám v tý první skupině těch příkazů. No ale já potřebuju, aby to hledalo zároveň ve všech těch příkazech. To znamená, že když vyslovím příkaz z jiné skupiny, tak to skočí do té jiné a odpoví mi.
- Přílohy
-
- automatic_cmd.ino
- (5.51 KiB) Staženo 154 x
Re: Vícevláknový program
Teda, tohle by mě fakt zajímalo. Nemáš někde nějaký příklad nebo odkaz na nějaký projekt, který to využívá? Já jsem zatím vždy řešil nějaké souběžné úlohy přes časový interrupt. Taky by mě zajímala ta ochrana a zamykání paměti.gilhad píše: ↑18 úno 2020, 03:31@KamilV: To je prave ten rozdil mezi "provadel paralelne vic instrukci naraz" a "fungovalo nekolik cyklu naraz".
To prvni samozrejme nejde, protoze procesor je jednovlaknovy a umi delat jen jednu instrukci v dany okamzik (vcetne preruseni).
To druhe samozrejme jde, pokud se to vhodne napise - muzu mit jeden cyklus (while, for, ci libovolny jiny), co kazde 1.1 sec prepne LEDku mezi sviti/neviti. Druhy, ktery kazde 1.2 sec udela krok motorkem vlajeckou. Treti, ktery ceka libovolne dlouho na stisknuti tlacitka, pak zmeni barvu te LEDky a naledne 0.5 sec. to tlacitko debouncuje. Ctvrty, ktery porad dokola hlaje par taktu z pisnicky. Paty, ktery ... a to vse se deje naraz a nezavisle na sobe (i kdyz se ceka na dodebouncovani tlacitka, tak LEDka blika, motorek krokuje, pisnicka hraje ...). Sdilet jak pamet, tak I/O vetsinou muzou do te miry, ze se jim muze vyplatit ji vuci sobe zamykat, aby se predeslo rizikovym konkurencnim pristupum, napr. do retezcu, ci jinych struktur.
@Kabicek: Co si od tech while cyklu slibujes, ze budou delat - pokud je neumis napsat presne, tak aspon formou komentare - vetsina veci, ktere si zacatecnik od cyklu muze slibovat, lze provadet "naraz", alespon ze se to tak nezavislemu pozorovateli jevi. Naopak malokdy dokaze zacatecnik vymyslet rozumnou situaci, kde by to "prakticky neslo".
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů