Toastbrot
17.01.2006, 21:44
Hallo,
ich habe in meiner main() ein Menü aufgebaut, dass verschiedene unterfunktionen aufruft. Funktioniert alles soweit, allerdings wird nach einem Interrupt nicht an die richtige Stelle gesprungen.
Daher habe ich vor der main() noch 2 volatile Varibalen deklariert
volatile int8_t agrobot; //Menü-Ziffer
volatile int8_t agrobot2; //Vorherige Menü-Ziffer
Der Interrupt soll nun "agrobot2" mit der aktullen Menü-Ziffer belegen, aus der er gerade raus gesprungen ist, anschließend wird "agrobot" mit einer neuen Ziffer belegt, die auskunft über die aufzurufende Funktion gibt.
SIGNAL (SIG_INTERRUPT0) //Auffahrschalter Front
{
agrobot2 = agrobot;
agrobot = MENU_backevade; //MENU... ist per define festgelegt
}//Auffahrschalter Front
Darauf soll das Hauptmenü die Funktion aufrufen, die vom Int. ausgelöst werden soll. Dieser wird als Parameter "agrobot2" übergeben, was anschließend einfach zurück gegeben wird, und somit als nächster Menüpunkt verwendet wird:
while(1) //Hauptschleife
{
//Aufgabe/Funktion abfragen
switch ( agrobot )
{
case MENU_error: agrobot = error(); //Fehlerausgabe
break;
case MENU_menu: agrobot = menu(); //Menü
break;
//...weitere Menüpunkte
case MENU_backevade: agrobot = backevade(agrobot2); //Rückwärts ausweichen
break;
case MENU_frontevade: agrobot = frontevade(agrobot2); //Vorwärts ausweichen
break;
}
}//Hauptschleife
Wird alles soweit kompiliert, allerdings passiert beim Auslösen des Interrupts nichts.
Kann mir da jemand helfen wo der Fehler liegt, oder sagen wie es besser geht?
Ich hoffe das ist nicht zu speziell und ich habe mich vernünftig ausgedrückt ;)
ich habe in meiner main() ein Menü aufgebaut, dass verschiedene unterfunktionen aufruft. Funktioniert alles soweit, allerdings wird nach einem Interrupt nicht an die richtige Stelle gesprungen.
Daher habe ich vor der main() noch 2 volatile Varibalen deklariert
volatile int8_t agrobot; //Menü-Ziffer
volatile int8_t agrobot2; //Vorherige Menü-Ziffer
Der Interrupt soll nun "agrobot2" mit der aktullen Menü-Ziffer belegen, aus der er gerade raus gesprungen ist, anschließend wird "agrobot" mit einer neuen Ziffer belegt, die auskunft über die aufzurufende Funktion gibt.
SIGNAL (SIG_INTERRUPT0) //Auffahrschalter Front
{
agrobot2 = agrobot;
agrobot = MENU_backevade; //MENU... ist per define festgelegt
}//Auffahrschalter Front
Darauf soll das Hauptmenü die Funktion aufrufen, die vom Int. ausgelöst werden soll. Dieser wird als Parameter "agrobot2" übergeben, was anschließend einfach zurück gegeben wird, und somit als nächster Menüpunkt verwendet wird:
while(1) //Hauptschleife
{
//Aufgabe/Funktion abfragen
switch ( agrobot )
{
case MENU_error: agrobot = error(); //Fehlerausgabe
break;
case MENU_menu: agrobot = menu(); //Menü
break;
//...weitere Menüpunkte
case MENU_backevade: agrobot = backevade(agrobot2); //Rückwärts ausweichen
break;
case MENU_frontevade: agrobot = frontevade(agrobot2); //Vorwärts ausweichen
break;
}
}//Hauptschleife
Wird alles soweit kompiliert, allerdings passiert beim Auslösen des Interrupts nichts.
Kann mir da jemand helfen wo der Fehler liegt, oder sagen wie es besser geht?
Ich hoffe das ist nicht zu speziell und ich habe mich vernünftig ausgedrückt ;)