Hallo, ich fange gerade mit der Programmierung von AVR-µCs an und verwende dazu AVR-Studio und AVR-GCC. Bisher habe ich immer Programme für PC erstellt oder für PIC-Mikrocontroller. Mein Problem: Ich finde für den AVR-GCC nirgends in der Dokumentation eine Tabelle aller verfügbaren Datentypen und ihre jeweilige Länge. gibt es z.B. bei AVR-GCC die Datentypen int, double und char? Und wenn ja, wie viele bits sind es jeweils??? Habe nur sowas wie uint_8 in der inttypes.h gefunden, aber das kann es ja nicht sein... Schöne Grüße, Alex
Hier steht etwas beschrieben: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ganzzahlige_.28Integer.29_Datentypen
Alex Bürgel wrote: > > gibt es z.B. bei AVR-GCC die Datentypen int, double und char? int, double, char, long sind die C-Standarddatentypen, die jede C Implementierung mitbringen muss. > Und wenn > ja, wie viele bits sind es jeweils??? Kannst du auf deinem µC schon Ausgaben über die serielle Schnittstelle machen, oder zumindest eine Ausgabe an einen Port? Wenn ja, diese Frage kann dir der Compiler (fast) selbst beantworten. In C werden Datentypen in char-Einheiten gemessen. Der Datentyp char hat also per Definition die Größe 1. Normalerweise (ist aber nicht zwingend) umfasst ein char 8 Bit - also 1 Byte. Und jetzt kommt der Compiler ins Spiel: Am Beispiel eines Ports. #include <avr/io.h> int main() { DDRB = 0xFF; // PORT B: alles auf Ausgang PORTB = sizeof( int ); while( 1 ) { } } Der µC legt dir also als Zahlenwert am Port B raus, wie gross für ihn ein int ist. Für den AVR-GCC ergibt sich char 1 int 2 long 4 float 4 double 4 Ein long umfasst also 4 char Einheiten, also 4*8 = 32 Bit > Habe nur sowas wie uint_8 in der inttypes.h gefunden, aber das kann es > ja nicht sein... Oh doch. Das kanns sehr wohl sein. Auf einem µC sind diese Datentypen mit definierten Bitzahlen nämlich meist wesentlich interessanter als die generischen Typen int und long, die je nach Rechnerarchitektur andere Größen haben.
> gibt es z.B. bei AVR-GCC die Datentypen int, double und char? Und wenn > ja, wie viele bits sind es jeweils??? DAS sind C-Standard-Typen. Breite ist wie im Standard definiert (oder wie im Fall von z.B int eben nicht definiert). > Habe nur sowas wie uint_8 in der inttypes.h gefunden, aber das kann es > ja nicht sein... Doch, das ist was Du willst und wie es sein soll. Und überasch damit weisst Du auch die Breite -- ohne die Definitionslücken von C als Falle zu haben.
Ist das echt so, dass der Compiler "serienmäßig" keine "normalen" Datentypen wie int, double, char, bool, byte etc. kennt? Im Moment muss ich sagen finde ich das sehr sehr armselig... Was soll das denn?
coldtobi wrote:
> DAS sind C-Standard-Typen. Breite ist wie im Standard definiert
Im Standard sind nur Mindestwerte definiert.
Alex Bürgel wrote: > Ist das echt so, dass der Compiler "serienmäßig" keine "normalen" > Datentypen wie int, double, char, bool, byte etc. kennt? Das hat sich jetzt wohl zeitlich überschnitten. Natürlich gibt es diese Standardtypen. Jeder C Compiler kennt sie!
Karl heinz Buchegger wrote: > Für den AVR-GCC ergibt sich > > char 1 > int 2 > long 4 > float 4 > double 4 Ah ja, super! Genau so etwas suchte ich. Warum ist das in der Dokumentation nirgendwo aufgelistet? > Oh doch. Das kanns sehr wohl sein. Auf einem µC sind diese > Datentypen mit definierten Bitzahlen nämlich meist wesentlich > interessanter als die generischen Typen int und long, die je > nach Rechnerarchitektur andere Größen haben. Naja, ich habe es mir inzwischen angewöhnt bei jedem neuen Compiler den ich verwende mir zu allererst die Datentypen anzuschauen um zu sehen was ich wo reinpacken kann... Vielen Dank! Schöne Grüße, Alex
Alex Bürgel wrote: > Ist das echt so, dass der Compiler "serienmäßig" keine "normalen" > Datentypen wie int, double, char, bool, byte etc. kennt? Doch, int/double/char schon, bool je nach Version des Standards. Nur byte gibt's nicht. Und im C-Standard steht auch drin, welche Wertebereiche bzw. Genauigkeiten dafür mindestens eingehalten werden müssen. Und daran hält sich auch GCC/AVR. Mit einer Ausnahme: "double" ist identisch mit "float", müsste aber mindestens 10 Stellen hergeben. Allerdings hält sich GCC, was die Dokumentation angeht, hier an das bekannte Freeware-Motto "der Quelltext ist die beste Doku" und überlässt es dem Anwender, die Typen durch Rückschluss aus stdint.h rauszukriegen.
Alex Bürgel wrote: > Karl heinz Buchegger wrote: > >> Für den AVR-GCC ergibt sich >> >> char 1 >> int 2 >> long 4 >> float 4 >> double 4 > > Ah ja, super! Genau so etwas suchte ich. Warum ist das in der > Dokumentation nirgendwo aufgelistet? Ohne den Beweis jetzt antreten zu können: Ich bin mir fast sicher das es irgendwo in der Doku steht. Ansonsten: Jeder Programmierer kann sich das mit wenig Aufwand leicht selbst bestimmen. Ausserdem gibt es noch die limits.h in der die daraus resultierenden Maximal und Minimalwerte für jeden Datentypen stehen. > Naja, ich habe es mir inzwischen angewöhnt bei jedem neuen Compiler den > ich verwende mir zu allererst die Datentypen anzuschauen um zu sehen was > ich wo reinpacken kann... ... und dann alles umzuprogrammieren, wenn die Typen zu klein sind. Na denn, viel Spass dabei.
Karl heinz Buchegger wrote: > leicht selbst bestimmen. Ausserdem gibt es noch die limits.h > in der die daraus resultierenden Maximal und Minimalwerte für > jeden Datentypen stehen. Ooops. Die gibts bei WinAvr ja gar nicht! Ist mir noch nie aufgefallen.
Karl wrote:
> Ooops. Die gibts bei WinAvr ja gar nicht! Ist mir noch nie aufgefallen.
Doch, die gibt es. Bei mir hier:
...\WinAVR-20070525\lib\gcc\avr\4.1.2\include
die ??? wrote: > Karl wrote: >> Ooops. Die gibts bei WinAvr ja gar nicht! Ist mir noch nie aufgefallen. > > Doch, die gibt es. Bei mir hier: > > ...\WinAVR-20070525\lib\gcc\avr\4.1.2\include Hab im falschen Verzeichnis gesucht. Mea culpa. Hatte mich schon gewundert, dass die nicht da sein soll.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.