Forum: Mikrocontroller und Digitale Elektronik CC5X Compiler 16 bit


von Helfried Passath (Gast)


Lesenswert?

Hallo,
Ich verwende den CC5X Compiler free version für den PIC16F676. Das
Problem ist, dass 16 bit Variablen vom Compiler als 8 bit Variablen
gehandhabt werden.zB. 16 bit Zählvariable kommt nur bis 255. Ich habe
den Compiler in die MPLAB6.50 eingebunden. Kennt jemand dies Problem
und die Lösung dazu? Mit dem HI-Tech Compiler habe ich keine Probleme
jedoch unterstützt die freie Version nicht den 16F676.
Vielen Dank

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo

das Problem liegt darin, daß die PIC's 8 Bit-Prozessoren sind. Wird
der Variablentyp int verwendet, hat die Variable automatisch 8 Bit. Für
16-Bit ist long zu verwenden.

Gerhard

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo nochmal

es gibt da noch ein PIC-Forum:

www.fernando-heitor.de

Vielleicht weiß da jemand Rat

Gerhard

von Peter D. (peda)


Lesenswert?

"das Problem liegt darin, daß die PIC's 8 Bit-Prozessoren sind"

Das hat absolut nichts mit der Bitbreite der CPU zu tun.
Auch alle mir bekannten 8051 und AVR Compiler halten sich an den
ANSI-Standard.

Und da gilt eben:

char = 8 Bit
int = 16 oder 32 Bit
long = 32 oder 64 Bit

D.h. der CC5X hält nicht den ANSI-Standard ein.


Peter

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Peter

das ist nicht richtig

Der Ursprung des INT ist die Breite des Datenbuses.

Gerhard

von Peter D. (peda)


Lesenswert?

@Gerhard,

kannst Du mir bitte einen Link zu einer ANSI-C Referenz nennen, wo das
steht ?

Ich habe bisher nur ausschließlich C Compiler gesehen, wo int
mindestens 16 Bit ist, egal ob für 4-, 8- oder 16-Bitter.

Es würde ja auch die Portabilität von C Code drastisch einschränken,
wenn das nicht so wäre.


Peter

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Peter

ich weiß nicht was in der ANSI-C ref steht, aber ich bin schon einige
male über den Blödsinn mit INT gestolpert. Und deshalb hab ich mir das
INT abgewöhnt und schreib immer short oder long, bzw int8 oder int16.
Solche "Inkompatibilitäten" treten verschiedentlich auf besonders
natürlich beim PC mit int als 16Bit bzw 32 Bit. Auch beim AVR ist das
nicht so ganz klar - wenn man sich die Doku anschaut - was der Compiler
macht wenn man nur int schreibt stat int8 oder int16. Bei 8-Bit
Mikrocontrollern (z.B. CCS) ist int = int8, damit entpsricht int der
Prozessor-Datenbus - Breite.

Gerhard

von Peter D. (peda)


Lesenswert?

short oder long bringt nichts, es gilt:

short int <= int <= long int.

Allein, wenn Du int8, int16 oder long32 nimmst bist Du auf der sicheren
Seite, da das keine Standard-Symbole sind.
D.h. die sind in irgendeinem *.h-File definiert und daher dem Compiler
anpaßbar.


Ich habe mal einen C-Kurs mitgemacht, das war noch auf VMS-Maschinen
und da galt: int ist immer mindestens 16 Bit, kann aber auch mehr
sein.
Deshalb sollte man, wenn man einen 16 Bit Überlauf absichtlich
auswerten will immer (wert & 0xFFFF) schreiben, damits bei 32 bit auch
noch klappt.


Peter

von Volker Kattoll (Gast)


Lesenswert?

Unterschiedliche Int-Grössen siehe:
http://www.lysator.liu.se/c/bwk-tutor.html
unter 3.

Hier ein kurzer Auszug:
C has four fundamental types of variables:

int  integer (PDP-11: 16 bits; H6070: 36 bits; IBM360: 32 bits)
char  one byte character (PDP-11, IBM360: 8 bits; H6070: 9 bits)
float  single-precision floating point
double  double-precision floating point

Volker

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Peter

mit short und long hast Du recht. Fazit: man kommt in keinem Fall darum
herum, sich im Programmers manual des C-Compilers schlau zu machen, was
Sache ist. Meines Erachtens ist int als int8 zwar Realität aber doch
eher unlogisch. es ist bedauerlich, daß es hier keinen einheitlichen
Standard gibt. Selbst beim PC gibts meines Wissens Unterschiede
zwischen Microsoft C und Borland C. "Früher" gabs neben int nur noch
short und long. da wars dann klar short = 16 Bit und long = 32 Bit.
Diese Verwendung ist bzw war anwendbar so lange die Microprozessoren
mit 16 bzw 32 Bit datenbus ausgestattet waren. Aber das ändert sich
jetzt wieder. Was ist int beim Athlon 64 ?


Gerhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.