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


von pontonfrog (Gast)


Angehängte Dateien:

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

von Karl H. (kbuchegg)


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.

von pontonfrog (Gast)


Angehängte Dateien:

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

von Claudio F. (zunge)


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

von Claudio F. (zunge)


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

von Claudio F. (zunge)


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

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.