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