Kein Fehler. Ungültiger Parameter ! Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 30.01.2005 23:52) | ||
Als Antwort auf Fehler im OS?? von Michael - 28.01.2005 21:51 | ||
| ||
Hallo Michael, > bei mir bleibt absolut reproduzierbar die CC2 stehen (OS=V3.0) wenn ich eine float variable auf eine > int variable zuweise. Allerdings "spinnt" die str.putintf funktion vorher > schon rum. Hier spinnt garnichts. Der Fehler liegt in Deinen Routinen: > a = 0xFF; > ... > a = a or (0xFF shl 8); > ... > b = math.log(a); > a ist hier -1. Bei einem Logarithmus mu� der Parameter grö�er 0 sein. Alles andere sind ungültige Werte. Da es beim Logarithmus um eine Float-Funktion handelt, endet das ganze in einer OS-Fehlermeldung. Wenn Du die HOST-LED ansehen würdest, könntest Du folgende Blinkfolge erkennen: 1x lang, 7x kurz Dies steht für "FPE INOF", was wiederum "Floating Point Error Integer Overflow" hei�t. Die Ursache dafür ist, wie gesagt, Dein Parameter -1. Leider erzeugt nicht dies selbst den Fehler, sondern erst in der Zeile b_i = math.floor(b + 0.5); , als ein Float-Rückgabewert einer Integervariable zugewiesen werden soll. > Die CC2 steht und wartet auf einen Reset. Es ist aber kein Absturz, sondern ein vom OS abgefangener Fehler. Zu sehen an dem Blinkcode der Host-LED bei OSOPT V3.0 . > 1. Warum kommt eine 6-stellige HEX-Zahl wenn nur eine 4-Stellige kommen darf? Das ist eine Folge der ungültigen Mathematischen Operation mit math.log(). > 2. Warum bleibt das Programm hängen? siehe oben. > 3. Das alles passiert nur, wenn ich alle bits der integerzahl auf 1 setze. Also mit 7FFF geht alles. siehe auch oben. Den Logarithmus kann man nur aus positiven Zahlen berechnen. Und das ist Mathematik und kein Fehler. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: |