Interrupt-Problem

Gast #3097709
Lesenswert?
• ▲
▼
Hallo Jungs
Ich habe einen Interrupt-Problem, was ich allein nicht lösen kann. Ich 
habe einen C-Code, was ich mit AVR 4.13 Problemlos kompiliere. Wenn ich 
den erzeugten Hex-File auf meinen Atmega 168 raufspiele, funktioniert 
alles einwandfrei.
Nun kompiliere ich den gleichen C-File mit AVR 4.19 dann kreige ich die 
Warnung, dass die Anweisung SIGNAL alt ist. Ich habe danach die folgende 
Ändeung durchgeführt:

-#include <avr/signal.h> durch #include <avr/interrupt.h> ersetzt.

- SIGNAL(SIG_ADC) durch ISR(ADC_vect ) ersetzt.

-SIGNAL(SIG_OUTPUT_COMPARE2A) durch ISR(TIMER2_COMPA_vect ) ersetzt.

Diese Änderungen haben nichts gebracht, mein Hex file ist falsch bzw das 
Programm bringt nur misst.

habe ich hier was falsch verstanden oder muss ich noch was ändern??

Ich bitte um euren Hilfe, bitte nur konstruktive Antworten

Danke im Voraus
Angehängte Dateien:
#3097742
Lesenswert?
• ▲
▼
Skusa schrieb:

> Nun kompiliere ich den gleichen C-File mit AVR 4.19 dann kreige ich die
> Warnung, dass die Anweisung SIGNAL alt ist.

Gut.
Das ist zwar richtig und sollte auch angepasst werden, aber die Warnung 
kann fürs erste mal ignoriert werden. Da gehts nur um Schreibweisen.

Die viel wichtigere Frage lautet nämlich: trotz der Warnungen - 
funktioniert das Programm noch?

> Diese Änderungen haben nichts gebracht, mein Hex file ist falsch bzw das
> Programm bringt nur misst.

In deinem Programm ist auch einiges ziemlicher Mist.
Zum einen ist es so geschrieben, dass eine Analyse recht schweirig ist. 
Zum anderen stechen mir solche Dinge

      unsigned int j;
      for (j = 0; j < 200; j++){};// wait for transistor

sofort ins Auge.
Sorry, aber das ist keine vernünftige Methode um etwas zuzuwarten. Denn: 
der Compiler wird diese Warteschleife restlos wegoptimieren, da sie 
nichts macht ausser Zeit zu verbrauchen und genau das ist die Aufgabe 
des Optimizers, Code so umzuschreiben, dass er weniger Zeit verbraucht. 
Daher fliegt dieser Teil ganz einfach ersatzlos raus.

Ob das in deiner Anwendung einen UNterschied macht, kann ich nicht 
sagen.
Aber so über alles gesehen, wäre ein Redesign des ganzen Programms 
sowieso angebracht.
Gast #3097761
Lesenswert?
• ▲
▼
Hallo Buchegger

Karl Heinz Buchegger schrieb:
> Die viel wichtigere Frage lautet nämlich: trotz der Warnungen -
> funktioniert das Programm noch?

Das Programm funktioniert leider nicht mehr, dass ist was mich fertig 
macht und was ich nicht verstehen kann woran das liegt.

Karl Heinz Buchegger schrieb:
> n deinem Programm ist auch einiges ziemlicher Mist.
> Zum einen ist es so geschrieben, dass eine Analyse recht schweirig ist.
> Zum anderen stechen mir solche Dinge
>
>       unsigned int j;
>       for (j = 0; j < 200; j++){};// wait for transistor

Bei dieser Funktion wird einen Transistor eingeschaltet und ich warte 
sozusagen bis der eingeschwungener Zustand erreicht ist.
Was würden Sie noch mir empfeheln zu ändern, ich bin leider kein Profi, 
deswegen bin ich noch am üben

Danke
#3097768
Lesenswert?
• ▲
▼
Skusa schrieb:

> Das Programm funktioniert leider nicht mehr, dass ist was mich fertig
> macht

dann verwende den alten Compiler weiter.

Aber da jetzt den ganzen Code durchzusehen ist eine Sysiphusarbeit, 
zumal er auch so geschrieben ist, dass man ständig am Scrollen bzw. 
Bits_im_Datenblatt suchen ist.

Wenn ich den Code kriege, würde ich danach fragen was das alles machen 
soll, würde den Code wegschmeissen und neu schreiben. Geht auf lange 
Sicht schneller, als einen Halbtoten soweit aufzupäppeln, dass er noch 
eine Runde durchsteht.

Sorry. Klingt vielleicht hart, ist aber ungeschminkt.
#3097775
Lesenswert?
• ▲
▼
Du könntest vielleicht noch versuchen, den Code Schritt für Schritt in 
Betrieb zu nehmen.

D.h. Im Grunde erst mal im Code so ziemlich alles stilllegen und dann 
sukzessive einen Teil nach dem anderen wieder mit dazunehmen und dir 
überlegen, wie du die Dinge testen kannst. Dann wird dieser Teil 
ausführlich gestestet und wenn alles passt wird der nächste Teil 
aktiviert.
Gast #3097787
Lesenswert?
• ▲
▼
Karl Heinz Buchegger schrieb:
> Du könntest vielleicht noch versuchen, den Code Schritt für Schritt in
> Betrieb zu nehmen.
>
> D.h. Im Grunde erst mal im Code so ziemlich alles stilllegen und dann
> sukzessive einen Teil nach dem anderen wieder mit dazunehmen und dir
> überlegen, wie du die Dinge testen kannst. Dann wird dieser Teil
> ausführlich gestestet und wenn alles passt wird der nächste Teil
> aktiviert.

Ich danke, ich werde es mal versuchen
Gast #3097868
Lesenswert?
• ▲
▼
> n deinem Programm ist auch einiges ziemlicher Mist.
> Zum einen ist es so geschrieben, dass eine Analyse recht schweirig ist.
> Zum anderen stechen mir solche Dinge
>
>       unsigned int j;
>       for (j = 0; j < 200; j++){};// wait for transistor

>Bei dieser Funktion wird einen Transistor eingeschaltet und ich warte
>sozusagen bis der eingeschwungener Zustand erreicht ist.
>Was würden Sie noch mir empfeheln zu ändern, ich bin leider kein Profi,
>deswegen bin ich noch am üben


Das problem hier ist das der Compiler die Zeile wegschmeidt, wenn Du mit 
der Option -O2 übersetzt, und sie bei -O0 stehen lässt;

Um sicher zu gehen kannst Du hier für die deklaration von j ein volatile 
benutzen, dann bleibt der Code auf jeden Fall erhalten.

volatile unsigned int j;
for(j=0;j<200;j++)
{}
Gast #3097942
Lesenswert?
• ▲
▼
Hallo Jungs

Auf -O0 umzusetzen hat geholfen, jetzt geht alles ich bin euch wirklich 
unendlich dankbar.
für den erstes Test reicht die Änderung aber ich werde aufjedenfall die 
Software umschreiben.
Ich wünsche euch ein schönes Wochenenede

MfG

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.