www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Cosmic und ST7 if() else - Problem


Autor: pontonfrog (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich stehe vor einem Problem, das ich nicht wirklich nachvollziehen 
kann. Hab den Cosmic Compiler (Cx ST7 Ver 4.5.5 16 K frei) und möchte 
nen A/D-Wert einlesen und diesen vergleichen mit einem Grenzwert.


Dazu ruft der Bootloader zyklisch die Funktion applicationMain() (Siehe 
anhängende Datei). In dieser gibt es nun zwei bzw. drei if() Bedigungen. 
Eine liest die Werte ein, eine andere, geschachtelte sollte diese 
auswerten. Doch die geschachtelte innere Bedingung wird nur einmal 
ausgeführt, egal was sich an der A/D-Werten ändert. Die Messwerte kann 
ich über CAN auslesen und sehe auch deren Änderung, doch die innere 
Bedingung für Messwerte wird nicht nachgezogen. Woran kann dies liegen?

Grüße und Danke...

pontonfrog

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass dir mal zu debug Zwecken den Messwert1 *unmittelbar
vor* der Abfrage ausgeben.
Du wirst wahrscheinlich sehen, dass die Werte nicht so sind
wie du denkst dass sie sein sollten.

Autor: pontonfrog (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, danke zunächst für die Hilfe. Hab das ganze mal CAN-mäßig 
aufgezeichnet(siehe anhängende Datei).

Ist irgend wie komisch.


Grüße und Danke für Eure Hilfe

pontonfrog

Autor: Claudio Fos (zunge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Ich setzte auch den cosmic compiler ein, und genau mit if() else hatte 
ich auch mal ein problem.

if() else funktioniert nicht richtig wenn in der if-klammer mit uint_32 
oder long variablen garbeitet wird !!! warum weiss ich auch nicht ... 
bin immernoch am suchen obs vom compiler kommt oder ob der chip 
irgendwelche probleme mit 32bit variablen hat ... ich ab alle meine 
abfragen auf 16bit variablen begrenz und siehe da, alle funktioniert 
wunderbar ...

deine anwendung hat eine weitere tücke:
überprüfe ob deine adc-werde als volatile deklariert sind, und überprüfe 
ob allenfalls ein interrupt den lesezugriff auf diese variable (wenn sie 
breite als 8bit ist) unterbrechen könnte, das gibt ganz lustige effekte 
...

hoffe das hillft ...

gruss Claudio

Autor: Claudio Fos (zunge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo nochmals

eines der lustigen und gar nicht schönen pänomenen beim cosmics compiler 
(4.5.9) ist, das bei einem projekt mit short memory model oder bei einer 
32bit variabel welche mit @tiny an adresse 0x80 gelegt wird, die ersten 
2 bytes falsch initialisiert werden.

evtl. liegts einfach an den startup-sequenz ...

gruss Claudio

Autor: Claudio Fos (zunge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nachtrag:

scheint ein problem von GDB zu sein. wird der debugger gstartet und 
läuft durch bis main(), wird die variable falsch initialisiert, wird von 
anfang an mittels singlestep durchgesteppt, wird die variable richtig 
initialisiert???

mein system: stvd 4.1.2, rlink, st7-hardware

gruss claudio

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.