PIC16F690 Array als LONG deklarieren

Gast #4206166
Lesenswert?
• ▲
▼
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
#4206212
Lesenswert?
• ▲
▼
@ 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 #4206237
Lesenswert?
• ▲
▼
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 #4206248
Lesenswert?
• ▲
▼
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 #4206307
Lesenswert?
• ▲
▼
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
#4206539
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.