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(); > } >