Forum: Compiler & IDEs Interrupt und Funkionen


von Piscina (Gast)


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
}

von Peter II (Gast)


Lesenswert?

das sollte ohne Probleme gehen, dein Problem liegt also woanders.

das volatile macht bei einer funktion keinen sinn.

von coder (Gast)


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.

von stefe (Gast)


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

von Johann L. (gjlayde) Benutzerseite


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.