![]() |
Delphi-Version: 2009
Unerklärbarer Error bei Matrix befüllung
Hallo DP,
ich soll für einen Kumpel fragen, da er hier nicht angemeldet ist. Er programmiert gerade, einen kleinen LED Cube Simulator. Also er hat die Ports des Microcontrollers und möchte die Ebene so ansteurn:
Delphi-Quellcode:
Und das ist seine Funktion:
Ports2Matrix('&B00110011','&B00110011','&B00110011','&B00110011',2);
Delphi-Quellcode:
Nach durchsteppen, hat er rausbekommen, dass der Error in der oben markierte Zeile auftritt.
procedure TForm1.Ports2Matrix(Porta:String;Portb:String;Portc:String;Portd:String;Ebene:Integer);
var Pa,Pb,Pc,Pd:String; begin Pa := Copy(Porta,3,8); Pb := Copy(Portb,3,8); Pc := Copy(Portc,3,8); Pd := Copy(Portd,3,8); cube[1,1,Ebene+1] := StrToInt(Pa[8]); //Porta (Säule 1-8) cube[2,1,Ebene+1] := StrToInt(Pa[7]); cube[3,1,Ebene+1] := StrToInt(Pa[6]); cube[4,1,Ebene+1] := StrToInt(Pa[5]); cube[5,1,Ebene+1] := StrToInt(Pa[4]); cube[1,2,Ebene+1] := StrToInt(Pa[3]); cube[2,2,Ebene+1] := StrToInt(Pa[2]); cube[3,2,Ebene+1] := StrToInt(Pa[1]); cube[4,2,Ebene+1] := StrToInt(Pc[1]); //Portc (Säule 9-16) cube[5,2,Ebene+1] := StrToInt(Pc[2]); cube[1,3,Ebene+1] := StrToInt(Pc[3]); cube[2,3,Ebene+1] := StrToInt(Pc[4]); cube[3,3,Ebene+1] := StrToInt(Pc[5]); cube[4,3,Ebene+1] := StrToInt(Pc[6]); cube[5,3,Ebene+1] := StrToInt(Pc[7]); cube[1,4,Ebene+1] := StrToInt(Pc[8]); // Hier kommt der Error siehe unten cube[2,4,Ebene+1] := StrToInt(Pd[1]); //Portd (Säule 17) cube[3,4,Ebene+1] := StrToInt(Pb[8]); //Portb (Säule 18-25) cube[4,4,Ebene+1] := StrToInt(Pb[7]); cube[5,4,Ebene+1] := StrToInt(Pb[6]); cube[1,5,Ebene+1] := StrToInt(Pb[5]); cube[2,5,Ebene+1] := StrToInt(Pb[4]); cube[3,5,Ebene+1] := StrToInt(Pb[3]); cube[4,5,Ebene+1] := StrToInt(Pb[2]); cube[5,5,Ebene+1] := StrToInt(Pb[1]); end; Folgender Error tritt auf:
Code:
array ist ein array of integer.
Erste Gelegenheit für Exception bei $761DFBAE. Exception-Klasse EConvertError mit Meldung '''
Soll mich von ihm schon mal bedanken. |
AW: Unerklärbarer Error bei Matrix befüllung
Ist der Array dynamisch? Grenzen?
|
AW: Unerklärbarer Error bei Matrix befüllung
Festes array, 1..5,1..5,1..5
|
AW: Unerklärbarer Error bei Matrix befüllung
Pc[8] enthält wohl keinen gültigen Integerstring. Soll er mal als watch anschauen.
|
AW: Unerklärbarer Error bei Matrix befüllung
Moin,
mit den von Dir angegebenen Codeabschnitten (eingebaut per Copy&Paste) kann ich das Problem weder mit D7 noch mit XE nachvollziehen. |
AW: Unerklärbarer Error bei Matrix befüllung
Kann es vielleicht sein, dass wenn er in einem anderen Timer gerade die Matrix ausliest, dass es dann zum Error kommt???
Aber: Er hat mir gerade gesagt, dass es immer vorkommt, wenn er vom String den Index 8 auslesen will. |
AW: Unerklärbarer Error bei Matrix befüllung
Ich würde erstmal eine Überprüfung einbauen, daß die vier P-strings auch wirklich 8 Zeichen lang sind.
|
AW: Unerklärbarer Error bei Matrix befüllung
Man könnte eine zusätzliche Sicherheit einbauen und prüfen ob Porta/b/c/d wirklich mit 10 Zeichen an die Funktion übergeben wurde, also
Delphi-Quellcode:
€: Gibts nicht, da war einer schneller (das passiert, wenn die Threads lange im Brwoser-Tab schlummern, sollte nicht immer so viele auf einmal öffnen) ;)
if Length(Porta) >= 10 then
Pa := Copy(Porta,3,8) else Pa := '00000000'; // oder Fehlermeldung ausgeben |
AW: Unerklärbarer Error bei Matrix befüllung
Man sollte in so einem Fall unbedingt auch das RangeChecking einschalten, das bringt meist schon so einiges zutage.
Unabhängig von dem Fehler ließe sich das alles aber noch etwas beschleunigen. Da in Delphi
Delphi-Quellcode:
und
Ord(false) = 0
Delphi-Quellcode:
ist:
Ord(true) = 1
Delphi-Quellcode:
cube[1, 1, Ebene + 1] := Ord(Pa[8] <> '0'); //Porta (Säule 1-8)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz