Čo je to atomickosť prístup??? Víc info. Ať hledám jak hledám, nic jsem nenašel. pošli nějaký odkaz. Ať se o tom dozvím. Díkespeterple napísal:Oba predrečníci sú trochu mimo so svojimi odpoveďami.
Čo je to atomickosť prístupu nevedia ani mnohí "machri" čo programujú PHP, Javascript, dokonca aj JAVA. V tých jazykoch je to tiež zvyčajne skryté, takže to netreba riešiť, len za určitých okolností. Kde je zase vidno kto tomu ako rozumie. Ale v C (akože Wiring) je to jedna z nášlapných mín na ktorú začiatočník ľahko nabehne. Preto je používanie millis() lepšie ako sa snažiť o prácu s prerušeniami ak tomu programátor nerozumie.
delay ale aby program bežal dalej
Moderátor: Moderátori
- jirka.jirka.
- Ultimate člen
- Príspevky: 1539
- Dátum registrácie: 17 Okt 2008, 00:00
- Bydlisko: Uherské Hradiště
- Kontaktovať používateľa:
Re: delay ale aby program bežal dalej
0
Re: delay ale aby program bežal dalej
"Atomickosť" je nedeliteľnosť. V prípade C++ sa jedná o sekvenciu príkazov, ktorá musí za každých podmienok zbehnúť neprerušovane vo vopred danej postupnosti. Toto je problematika systémov s paralelným spracovaním ale aj systémov s prerušeniami.
Zmysel je v tom, aby sa predišlo nepredvídanému/nedefinovanému správaniu programu.
Napr. pracujem s nejakou premennou, ktorú je možné meniť prerušením alebo paralelným vláknom. Je nežiadúce, aby sa mi hodnota premennej zmenila "pod rukami". Preto musím zakázať prístup k týmto dátam po dobu, kým neukončím sekvenciu príkazov.
Zmysel je v tom, aby sa predišlo nepredvídanému/nedefinovanému správaniu programu.
Napr. pracujem s nejakou premennou, ktorú je možné meniť prerušením alebo paralelným vláknom. Je nežiadúce, aby sa mi hodnota premennej zmenila "pod rukami". Preto musím zakázať prístup k týmto dátam po dobu, kým neukončím sekvenciu príkazov.
0
- jirka.jirka.
- Ultimate člen
- Príspevky: 1539
- Dátum registrácie: 17 Okt 2008, 00:00
- Bydlisko: Uherské Hradiště
- Kontaktovať používateľa:
- roboulbricht
- Stály člen
- Príspevky: 156
- Dátum registrácie: 07 Jan 2015, 12:01
- Bydlisko: Banská Bystrica
- Vek: 54
- Kontaktovať používateľa:
Re: delay ale aby program bežal dalej
Peter mal na mysli toto. Je tam cli();, čo zabráni prerušeniu, prečíta si aktuálnu hodnotu a potom zase povolí prerušenia. Preto sa ti nestane, že prečítaš pol hodnoty pred prerušením a pol po ňom. Je to podobné, ako si mal na mysli s kritickou sekciou.
Kód: Vybrať všetko
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
0
Arduino tools: AVR Timer Calculator, AVR Register Table
YouTube: Arduino
Moja hudba: SoundCloud, MuseScore
YouTube: Arduino
Moja hudba: SoundCloud, MuseScore
- jirka.jirka.
- Ultimate člen
- Príspevky: 1539
- Dátum registrácie: 17 Okt 2008, 00:00
- Bydlisko: Uherské Hradiště
- Kontaktovať používateľa:
Re: delay ale aby program bežal dalej
No ale problém by mohl být s tím, u cli() zakážeš všechno přerušení....
Možná by bylo lepší zakázat pouze to, které upravuje danou proměnnou. Ale u arduino do toho moc nevidím.
Možná by bylo lepší zakázat pouze to, které upravuje danou proměnnou. Ale u arduino do toho moc nevidím.
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: delay ale aby program bežal dalej
áno, presne toto som mal na mysli. Urobiť sa to dá všelijako. Toto koštuje iba tri strojové inštrukcie. Teda je to veľmi jednoduché. Platí sa za to predĺžením latencie prerušení o 8 strojových inštrukcií čo trvá ten presun long int z jednej premennej do druhej.
Dalo by sa zakazovať iba to prerušenie z časovača ale bolo by to na viac inštrukcií. Alebo by sa to dalo aj bez zakazovania prerušenia.
Možností je ako vždy viacero. Toto je taká klasika čo som tiež prevzal z nejakého atmel app note. Má to výhodu že to obnovuje do pôvodne nastaveného stavu. Čo je lepšie ako cli() a potom sti().
Dalo by sa zakazovať iba to prerušenie z časovača ale bolo by to na viac inštrukcií. Alebo by sa to dalo aj bez zakazovania prerušenia.
Možností je ako vždy viacero. Toto je taká klasika čo som tiež prevzal z nejakého atmel app note. Má to výhodu že to obnovuje do pôvodne nastaveného stavu. Čo je lepšie ako cli() a potom sti().
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok