In C wird die Hauptfunktion main() normalerweise von einem übergeordneten Betriebssystem aufgerufen und über return springt das Programm zum aufrufenden Punkt zurück. Dieser Rücksprungpunkt ist bei AVR-GCC aber nicht defininiert, deshalb springt das Programm ins Nirwanwa, wenn es mit return beendet wird.
Ein Programm könnte etwa so aussehen:
PHP-Code:
#include "asuro.h"
#include "myasuro.h"
int main(void)
{
unsigned int ldata[2];
Init();
FrontLED(ON);
Sleep(255); // warten bis FrontLED leuchtet
LineData(ldata); // ADC auf Betriebstemperatur bringen
// MotorDir(FWD,FWD); // Init() setzt MotorDir schon auf FWD,FWD
MotorSpeed(150,150); // losfahren
while(1)
{
LineData(ldata); // Liniensensoren einlesen
if (ldata [0] > ldata [1]) // links heller, nach rechts fahren
{
MotorSpeed(200,100);
StatusLED(RED);
}
else
{
MotorSpeed(100,200); // rechts heller (oder gleich), nach links fahren
StatusLED(YELLOW);
}
if (PollSwitch()>0) // Taster betätigt?
{
MotorSpeed(0,0); // wenn ja, dann stop
StatusLED(GREEN);
BackLED(ON,ON);
while(1); //Stop und Ende
}
}
return(0); // darf nie ausgeführt werden!
}
(ungetestet)
Das funktioniert aber nur, wenn PollSwitch() richtig arbeitet.
Lesezeichen