Moin zusammen,
ich bin mal wieder ein wenig mit meinem PIC 16F690 am experimentieren
und bekomme eine Sache nicht hin. CCS C-Compiler, PCM 5.027
Ich habe ein DatenARRAY mit 128 Zellen als Konstante im Programm
hinterlegt.
1
constchararray[]={1,2,3,4,5,usw};
Im Programm greife ich darauf zu und rechne mit diesem Wert. Alle
Variablen in der Rechnung sind vom Typ LONG und es wird kein Wert über
30000 erreicht.
Alles Funktioniert so weit.
Nun wollte ich Werte im ARRAY > 255 pro Zelle hinterlegen und habe das
ARRAY als LONG deklariert und nicht als CHAR.
Es funktioniert nicht. Sobald ich einer Variablen vom Typ LONG den Wert
aus dem ARRAY zuweise, z.B. 311, dann bekomme ich als Wert der Variablen
55 angezeigt, also 311 - 256:
Wo liegt der Fehler? kann man als CONST keine LONG im ARRAY ablegen oder
was mache ich falsch?
Gruß
Uwe
aerodactyl schrieb:> Es funktioniert nicht. Sobald ich einer Variablen vom Typ LONG den Wert> aus dem ARRAY zuweise, z.B. 311, dann bekomme ich als Wert der Variablen> 55 angezeigt, also 311 - 256:
Mich wundert schon, dass sich eine const Variable überhaupt zuweisen
lässt.
@ aerodactyl (Gast)
>Ich habe ein DatenARRAY mit 128 Zellen
Elementen.
>als Konstante im Programm hinterlegt.>const char array [] = {1,2,3,4,5, usw};>Im Programm greife ich darauf zu und rechne mit diesem Wert. Alle>Variablen in der Rechnung sind vom Typ LONG und es wird kein Wert über>30000 erreicht.
Warum dann long? long sind auf fast allen Compilern 32 bit. Ein int
würde reichen, der hat hier 16 Bit.
>Nun wollte ich Werte im ARRAY > 255 pro Zelle hinterlegen und habe das>ARRAY als LONG deklariert und nicht als CHAR.
int reicht, ggf. aogar unsigned int.
>Es funktioniert nicht. Sobald ich einer Variablen vom Typ LONG den Wert>aus dem ARRAY zuweise, z.B. 311, dann bekomme ich als Wert der Variablen>55 angezeigt, also 311 - 256:>Wo liegt der Fehler?
An deiner Rechnung. Wahrscheinlich gibt es dort ein Problem.
>kann man als CONST keine LONG im ARRAY ablegen oder>was mache ich falsch?
Du zeigst uns nicht deinen Quelltext.
Bitte seid gnädig, dass ich die Elemente als Zellen beschrieben habe.
Im CCS PCM sind int Variablen 8 bit breit, long Variablen 16 Bit. Ist
so.
int16 = long = 16 Bit.
Rechnen brauchst du nicht. Wenn ich
1
test=ARRAY[27];
zuweise und ich statt der 311, die im ARRAY steht 55 in test stehen
habe, ist noch nichts gerechnet worden.
Also kann es nicht an der nachfolgenden Rechnung liegen.
Gruß
Uwe
aerodactyl schrieb:> test = ARRAY [27];
Ist ARRAY gleich array aus dem Eröffnungspost? was verbirgt sich hinter
'test'?
Rück besser den ganzen Code raus als alles nur scheibchenweise.
Hallo Max,
du hast recht ARRAY ist der Name des Arrays und test ist nur eine 16 Bit
variable vom Typ LONG der dem selektierten Element des Arrays zugewiesen
wird.
Werte <= 255 werden einwandfrei 1:1 zugewiesen. Werte > 255 nicht.
Gruß
Uwe
aerodactyl schrieb:> Werte <= 255 werden einwandfrei 1:1 zugewiesen. Werte > 255 nicht.
Wie hast du das überprüft?
P.S: Wenn jetzt nicht bald dein Quellcode kommt bin ich raus...
Lieber Max,
ich bin sicher nicht der Oberschlauberger, sonst würde ich nicht diese
Frage stellen. Aber wie ich den Wert einer Variablen überprüfen kann,
weiß ich schon. In meinem schlaues MPLAB kann ich bei einem "mouse-over"
über einer Variablen deren Wert anzeigen lassen und im Watch-Window
ebenfalls.
Salut
Uwe
aerodactyl schrieb:> Lieber Max,>> ich bin sicher nicht der Oberschlauberger, sonst würde ich nicht diese> Frage stellen. Aber wie ich den Wert einer Variablen überprüfen kann,> weiß ich schon.
Schön für dich.
In 60 von 100 Fällen liegt der Fehler nämlich nicht in der
Variablendefinition oder sonstwo, sondern genau in der Anzeigefunktion,
die den Wert ausgeben soll. Die Variable wurde auf einen höheren
Datentyp geändert und auf die Anzeigefunktion wurde vergessen. Die gibt
dann nach wie vor einen 8-Bit int aus.
Daher die Nachfrage.
Im übrigen ist an dem was du gezeigt hast, nichts falsch.
Wenn es also ein reales Problem gibt, dann in dem Teil den du nicht
gezeigt hast.
> In meinem schlaues MPLAB kann ich bei einem "mouse-over"> über einer Variablen deren Wert anzeigen lassen und im Watch-Window> ebenfalls.
Es soll auch schon Debugger gegeben haben, die Probleme hatten.