Hallo
Das Task-System des RP6 ist auch eines seiner Highlights. Damit kann er mehrere Abläufe parallel steuern ohne sich zu blockieren. Der Preis dafür ist eben die recht komplizierte Programmierung. Grundsätzlich muss man aber selbst dafür sorgen, dass die einzelnen Tasks abgearbeitet werden und keine Funktion (störend) blockierend auf den Rest des Programms wirkt. Hier ein Beispiel für ein 80an-80aus-80an-100aus-Blinken:
Nicht sehr elegant, aber es funktioniert und ist anschaulich...Code:#include "RP6RobotBaseLib.h" void eigenefunktion(void) { if (getStopwatch3() < 80) { setLEDs(63); //PORTC |= IO_PC7; //PORTC |= IO_PC5; } else if (getStopwatch3() < 80+80) { setLEDs(0); //PORTC &= ~IO_PC7; //PORTC &= ~IO_PC5; } else if (getStopwatch3() < 80+80+80) { setLEDs(63); //PORTC |= IO_PC7; //PORTC |= IO_PC5; } else if (getStopwatch3() < 80+80+80+100) { setLEDs(0); //PORTC &= ~IO_PC7; //PORTC &= ~IO_PC5; } else setStopwatch3(0); } int main(void) { initRobotBase(); setLEDs(0); //DDRC |= IO_PC7 | IO_PC6 | IO_PC6 | IO_PC4 //PORTC &= ~IO_PC7; //PORTC &= ~IO_PC6; //PORTC &= ~IO_PC5; //PORTC &= ~IO_PC4; setStopwatch3(0); startStopwatch3(); while(true) { eigenefunktion(); } return 0; }
Gruß
mic







Zitieren

Lesezeichen