PIC16F690 Array als LONG deklarieren

Gast #4206166
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
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.

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
Gast
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.
Gast
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
Gast
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
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.