ISR Probleme

OP (Firma: tet) #4394138
Hello,

kann es sein, dass eine längere/aufwendigere Funktion() nicht richtig 
funktioniert, sobald man mit Interrupts arbeitet (C-Microcontroller)?
Beim debugging wird mir sobald ich die ISR einfüge nach ca. 1-4 Cycles 
in die Variablen (in der Funktion) = not defined angezeigt.

Grüße
Gast
Joh W. schrieb:
> kann es sein, dass eine längere/aufwendigere Funktion() nicht richtig
> funktioniert, sobald man mit Interrupts arbeitet (C-Microcontroller)?
> Beim debugging wird mir sobald ich die ISR einfüge nach ca. 1-4 Cycles
> in die Variablen (in der Funktion) = not defined angezeigt.

Ja, vielleicht.

Bei mehr Details wäre u.A. auch eine präzisere Antwort möglich.
@ Joh Wolf (Firma: tet) (hampel)

>kann es sein, dass eine längere/aufwendigere Funktion() nicht richtig
>funktioniert, sobald man mit Interrupts arbeitet (C-Microcontroller)?

Im Normalfall passiert sowas nicht, im Einzelfall ist es aber möglich.

>Beim debugging wird mir sobald ich die ISR einfüge nach ca. 1-4 Cycles
>in die Variablen (in der Funktion) = not defined angezeigt.

Aha. Du hast also ein Problem mit dem Simulator. Das sollte man auch so 
sagen. Meistens tritt das Problem auf, wenn der Optimierer eingeschaltet 
ist. Dann muss man die Simulation mit dem compilierten programm ohne 
Optimierer machen.
Gast
> #pragma interrupt_handler Timer_ISR
Da scheint mir doch mindestens der Vector zu fehlen.

Wäre sowas nicht besser:
1
ISR (NAME_OF_INTERRUPT_vect) {
2

3
}
OP (Firma: tet)
Leider Nein, weil wenn ich das Programm einfach so durchlaufen lasse und 
die Werte mir über die UART ausgeben lassen --> ab der 2-3 Ausgabe sind 
alle Wert dauerhaft 0 und sobald ich die ISR wieder raus nehme --> 
funktioniert! und löst die ISR so langsam aus, dass sichergestellt wird, 
das die Madgwick() komplett druchgeführt werden kann z.B. mit 1Hz --> 
funktioniert ....
Gast
Joh W. schrieb:
> und sobald ich die ISR wieder raus nehme -->
> funktioniert!

Erstens, du bist nicht auf meinen Beitrag eingegangen.
Schade...

Und dieses hast du auch wohl noch nicht gelesen:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts
Schade ...


Und vielleicht, das interessiert mich jetzt auch nicht mehr, wirst du 
das SREG retten und wiederherstellen dürfen


Und, was das in der ISR tun soll...
1
if (CpuTimeNow == 65534)
2
  {
3
    CpuTimeNow = 0;
4
  }
Ist das vielleicht ein Witz, oder so...?



PS:
Und sowas traue ich mich als Arduino Jünger zu sagen...
Auch schade....
Gast
Joh W. schrieb:
> Ulrich F. schrieb:
>> Und, was das in der ISR tun soll...if (CpuTimeNow == 65534)
>>   {
>>     CpuTimeNow = 0;
>>   }
>> Ist das vielleicht ein Witz, oder so...?
>
>
> würde ich die if Anweisung mit in die Main() nehmen, könntest du mir
> dann bei meiner Herausforderung einen kleinen Tipp geben?

Die If Anweisung ist komplett über!
16 Bit Variablen machen den Wrap Around automatisch.
Oder verfolgst du damit einen besonderen Zweck?

Mit dem CY8C29466-24PXI und seinen Brüdern kenne ich mich leider nicht 
aus.
OP (Firma: tet)
Ulrich F. schrieb:
> Wäre sowas nicht besser:ISR (NAME_OF_INTERRUPT_vect) {
>
> }

Habe dazu :
#pragma interrupt_handler
<func1> [ ,<func2> ]*


For interrupt handlers written in C. Virtual registers are saved only if
they are used, unless the handler calls another function. In that case,
all Virtual registers are saved.
This interrupt handler changes the ret to reti at the end of the 
function.
The function can be used as an interrupt handler by adding a
ljmp _name at the interrupt vector in boot.tpl. It cannot be used in
regular C code because the reti expects the flags to be pushed on
the stack.
In the large memory model, the Page Pointer registers (CUR_PP,
IDX_PP, MVW_PP, and MVR_PP) are saved and restored in addition
to the Virtual registers for a #pragma interrupt_handler.

gefunden

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.