Hallo
Genau bei stopVal = getStopwatch1(); tritt ein ISR-Aufruf auf. Das Highbyte der StopWatch ist schon erhöht, das Lowbyte noch nicht:Code:#include "RP6RobotBaseLib.h" // The RP6 Robot Base Library. int main(void) { initRobotBase(); writeString_P("Do some LED stuff!\n"); startStopwatch1(); uint8_t runningLight = 9; uint16_t stopVal = 0; while(true) { cli(); stopVal = getStopwatch1(); sei(); if (stopVal > 600) { writeInteger(getStopwatch1(), DEC); writeChar('\n'); writeInteger(stopVal, DEC); writeChar('\n'); writeChar('\n'); setLEDs(runningLight); runningLight <<= 1; if(runningLight > 36) runningLight = 9; setStopwatch1(0); } } return 0; }
511 ist binär 01 11111111
512 ist binär 10 00000000
767 ist binär 10 11111111
Deshalb ist stopVal größer als 600 und die Stoppuhr aber immer noch kleiner als 600 ;)
Das Stichwort heißt "atomar".
Eigentlich logisch, aber das hat bisher noch keiner bemerkt. Glückwunsch!
Gruß
mic
[Edit]
Code:#include "RP6RobotBaseLib.h" // The RP6 Robot Base Library. int main(void) { initRobotBase(); startStopwatch1(); while(true) { if (getStopwatch1() > 600) { writeInteger(getStopwatch1(), DEC); if(getStopwatch1() < 601) writeChar('*'); writeChar('\n'); setStopwatch1(0); } } return 0; }Schlanker und schneller wäre wohl ein schlichtesCode:#include "RP6RobotBaseLib.h" // The RP6 Robot Base Library. int main(void) { initRobotBase(); startStopwatch1(); while(true) { cli(); if (getStopwatch1() > 600) { sei(); writeInteger(getStopwatch1(), DEC); if(getStopwatch1() < 601) writeChar('*'); writeChar('\n'); setStopwatch1(0); } else sei(); } return 0; }
}
sei();
anstelle von
}
else sei();





Zitieren

Lesezeichen