Tema: Re: Padekit pagaut bug'a (Arduino)
Autorius: CodeC
Data: 2015-06-06 09:26:11
On 06/06/2015 01:53 AM, Laimis wrote:
> ig rašė:
>
>> Zodziu biski konfuze. Gal kas turi minciu ?
>
> Kaip jau minėjo — ISR nebaigus skaityti 2 counter'io baitų (int). Reikia
> tiesiogiai išjungti interrupt'us, kad operacija būtų atomic.
> Bet šiaip tai keista, kad volatile dokumentacijoje apie tai neužsiminta.

kas cia keisto? skaitykit normalias dokumentascijas o ne kazkokius 
arduino looseriu prirasytas nesamones.
volatile visur ir visada buvo yra ir bus keywordas compileriui, kad to 
kintamojo access'o neoptimizuoti ir uzkrauti ji i registrus is atminties 
kiekvieno access'o metu. VISKAS, end of story.
visa kita toliau - nebe volatile keyword'o dokumentacijos sritis, o 
arogantiskas replikas rasinejanciu gyku issilavinimo spragos.

>
>
> volatile unsigned int c = 0;  // counter
> volatile boolean forward = 1; // direction
>
> int fwdrevPin = 9;
>
> void setup() {
>    attachInterrupt(0, tacho, CHANGE);
>    pinMode(fwdrevPin, OUTPUT);
> }
>
> void loop() {
>    cli();
>    if (c > 623) {
>      c = 0;                       // Reset counter
>      sei();
>
>      forward = !forward;          // Switch direction
>      if (forward) {
>        analogWrite(fwdrevPin, 140);
>      }
>      else {
>        int t = 128 - torque;      // WTF?
>        analogWrite(fwdrevPin, 100);
>      }
>    }
>    sei();
> }
>