PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software Bug?



rnhvw
06.07.2004, 17:46
Hallo,

Dieses ist mein program:
====================
define a byte[8]
define b byte[9]

#MeinFunc
a = 77
b = 77
if (a=b) then goto FuncEnde
print "Fehler: a ungleich b" 'dieses soll niemals passieren
#FuncEnde
return
====================

Ab und zu wenn ein ACS interrupt actief ist erscheint:

"Fehler: a ungleich b"

(a und b werden NICHT benutzt im interrupt)

Hat jemand auch mahl so etwas mitgemacht?

Was mach Ich falsch hier? Oder ist das ein systeem-software fehler?

Grusse

Henk (aus Holland)

Dirk
06.07.2004, 20:52
Hi "rnhvw",

was Dein Fehler ist, weiß ich auch nicht.
Falls Du das LCD-Display am RP5 betreibst, ist häufig der Bezeichner "lcd_param" für Byte[8] belegt, so dass eine Doppelbelegung mit Bezeichner "a" vorliegen könnte.

Gruß Dirk

rnhvw
06.07.2004, 21:07
Hallo Dirk

Ich hab nur der Robby ohne etwas drauf oder dran, und habe verschiedene andere variabelen getested und bekomme immer dasszelbe Resultat.

Henk

rnhvw
07.07.2004, 07:25
Hallo,

Ich hab mein Program nogmal grundlich untersucht. und entschliesse daraus dass es sich wahrscheinlich um ein ernsthafter Operating-system Fehler handelt.

Wenn Ich im Hauptprogram ein IF statement benutze, z.B:

#LOOP
A=77
B=77
IF (A=B) THEN GOTO LOOP <<====
PRINT "A=";A 'Soll NIEMALS passieren
PRINT "B=";B 'Soll NIEMALS passieren
GOTO LOOP

und AUCH ein IF statement im Interrupt function benutze Z.B.

IF 3=3 then C=27

dann erscheint ab und zu den Printout:
A=77
B=23
oder
A=23
B=77

Dann bekomt oder A oder B ab und zu die Wert von C (27) !!!

Ich glaub dass beim anfang von dem interrupt function die Microcontroller
accumulator (oder sonstige register) nicht gespeichert und am ablauf der Interrupt wieder zuruck gesetzt werden.

Wenn Ich mich nicht irre, (dass hoffe Ich) dann ist dass doch ein ziemlich ernsthafter Sache.

Grusse

Henk

rnhvw
07.07.2004, 07:29
Rectification:

IF 3=3 then C=27

sollte sein

IF 3=3 then C=23

Dirk
07.07.2004, 11:36
Hi "rnhvw",

ich habe Probleme mit Deinen Beispielen.
Vielleicht solltest Du doch 'mal ein konkretes Projekt vorstellen, in dem Du auf den "Fehler" aufmerksam geworden bist!
Eine meiner Fragen ist z.B., ob Du auch in der Interrupt-Routine die Bytes [8] und [9] benutzt (ich glaube das nicht wirklich!)?
Kannst Du Deine ACS-Interrupt-Routine hier einmal komplett posten?

Gruß Dirk

Sinnlosprojekt
07.07.2004, 15:16
Hi,

ich denke im Interrupt wird deine Variable überschrieben... und der Interrupt kann ja ab und zu deine loop unterbrechen gerade for der if abfrage in der loop.......

Is der Fehler denn nur mit aktivem interrupt??? dann such im interrupt was dort passiert...vieleicht überschreibt ja deine variable C im Interrupt deine variable B wegen falscher Ram zuweisung......

Bye
M.

Matthias
07.07.2004, 15:26
Probier doch einfach mal:

#MeinFunc
a = 77
b = 77
if not a=b then print "Fehler: a ungleich b" else goto FuncEnde
#FuncEnde
return

Matthias
07.07.2004, 15:29
Zu den Fehlern: Das C****d-Betriebssystem hat so einige bugs. Umso länger man die CC proggt, umso mehr findet man...

rnhvw
08.07.2004, 07:48
Hallo robotiker,

Ich hab ein einfaches Basic Program Beispiel zugefugt.
Ich bin uberzeugt das es sich um ein Bug handelt, aber habe auch eine ganz einfache losung dazu gefunden.
Schau mal dass Beispiel an.

Grusse

Henk