mikrocontroller.net

Forum: Compiler & IDEs Datentypen bei AVR-GCC


Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: coldtobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
coldtobi wrote:

> DAS sind C-Standard-Typen. Breite ist wie im Standard definiert

Im Standard sind nur Mindestwerte definiert.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: die ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.