Interrupt und Funkionen

Gast #2257455
Lesenswert?

Hi,
Ich habe ein Problem mit der Interrupt programmmierung. Und zwar möchte 
ich aus einem Interrupt heraus eine Funktion aufrufen, dies klappt auch 
ganz gut. Allerdings springt er nachdem die Funktion fertig ist nicht 
wieder zurück in die Interruptroutine. Das ist für mich ein Problem da 
der Code in der ISR fertig ausgeführt werden muss.

Hier der Code:
1
volatile void sayHello(){
2
SendUart("Bonjour");
3
}
4

5
ISR(INT0_vect){
6
...
7
sayHello();
8
...
9
}
Gast #2257544
Lesenswert?

Bei so wenigen Informationen kannst Du keine Hilfestellung erwarten. 
Außer vielleicht einen Tipp unabhängig von deinem Problem: Deine 
Interrupt-Routine sollte möglichst kurz sein bzw. so schnell wie möglich 
abgearbeitet werden.
Gast #2257839
Lesenswert?

Hallo,
 deine Informationen sind ungenügend !!!

Man kann nur vermuten was da los ist!

Ich nehme an dass deine sayHello() Routine ebenfalls zum Senden einen 
Interrupt benötigt (oder auf einen wartet). Da aber innerhalb eines 
Interrupts alle weiteren disabled sind blockiert sich das ganze Systen 
selbst!!!

Überprüf das mal in diese Richtung
Persönliche Seite #2258139
Lesenswert?

Meine Kristallkugel sagt, daß du avr-gcc verwendest.

Das Codebeispiel wird korrekt übersetzt:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
extern void SendUart (const char*);
5

6
void sayHello()
7
{
8
    SendUart ("Bonjour");
9
}
10

11
ISR (INT0_vect)
12
{
13
    sayHello();
14
}

Das "volatile" erzeut eine zusätzliche Warnung, ansonsten ist der Code 
damit gleich.

Dein Problem ist vermutlich

* Ein Stacküberlauf und Programmabsturz
* Fehler in SendUart
* SendUart geht davon aus, daß IRQs aktiv sind
* UART ist nicht korrekt initialisiert

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren