- Labornetzteil AliExpress         
Ergebnis 1 bis 9 von 9

Thema: Variablentyp bei Präprozessor

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    wie man dem Ergebniss einer Präprozessorberechnung einen Variablentyp aufzwingen kann.
    So was gibt es nicht.
    Der Präprozessor rechnet in seinem eigenen Bereich (#if-Zeilen) nach seinen eigenen Regeln. Mit denen bin ich nicht vollständig vertraut, aber ich bin mir ziemlich sicher, dass er nicht mit unterschiedlichen Typen arbeitet.

    Bei dem ganzen "Typen-Zeug" geht es um C-Berechnungen im Allgemeinen. Dabei spielt es überhaupt keine Rolle, ob ein Teil der Berechnung per Präprozessor-Textersetzung eingebracht wurde, oder nicht. Der Begriff "Präprozessorberechnung" ist hier daher völlig unangebracht und missverständlich.

    Code:
    #define F_CPU              1475600    // im makefile definiert
    #define Systemtakt            50
    #define VorteilerTimer0        1024
    ...
    TCNT0 = (256-((F_CPU/VorteilerTimer0)/(Systemtakt*2)));
    F_CPU ist vom Typ int32_t
    Ja.

    VorteilerTimer0 ist vom Typ int16_t,
    Ja.

    das Divisionsergebniss ist ebenfalls vom Typ int16_t
    Nein, int32_t.

    Systemtakt ist vom Typ int8_t
    Nein, int16_t.

    das dann folgende Divisonsergebnis ebenfalls int8_t
    Nein, int32_t.

    Und die Differenz dann auch int8_t
    Nein, int32_t.

    damit passend für das Register TCNT0
    Bei der Zuweisung wird dann das int32_t Ergebnis auf uint8_t zurechtgestutzt.

    Bei Berechnungen werden die Typen der beiden Operanden aneinander angepasst, wobei der größere Typ den Takt vorgibt (mindestens int), und das (Zwischen-)Ergebnis hat den gleichen Typ.

    Welches "Symbol" wird verwendet um eine int16_t bzw. eine unit16_t zu erzwingen?
    int16_t ist es bereits per Default. "50" ist ein int (äquivalent zu int16_t bei AVR). Ein unsigned macht man daraus mit U. "50U" ist ein unsigned int (äquivalent zu uint16_t bei AVR).
    MfG
    Stefan

  2. #2
    Hallo Stefan,

    danke für Dein Erklärungen:

    Zitat Zitat von sternst Beitrag anzeigen
    Bei Berechnungen werden die Typen der beiden Operanden aneinander angepasst, wobei der größere Typ den Takt vorgibt (mindestens int), und das (Zwischen-)Ergebnis hat den gleichen Typ.
    int16_t ist es bereits per Default.
    Das brings dann ja wohl auf den Punkt.

    Viele Grüße

    Bot-Builder
    Legasteniker on Board!
    gefundene Rechtschreibfehler dienen der Belustigung des Lesers und dürfen von diesem behalten werden.

Ähnliche Themen

  1. Funktion und Variablentyp
    Von steep im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 20.07.2011, 16:36
  2. Welchen Variablentyp bei 'Textinhalten'....
    Von popi im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 16.06.2006, 18:23
  3. Nur Nummern in Array / nur Variablentyp byte als Array?
    Von Crashmichl im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 27.04.2006, 23:15
  4. Binär-Dezimal Präprozessor für Linux gcc
    Von danst im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 26.10.2005, 08:52
  5. Variablentyp von Ports und Pins
    Von timpleton im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 24.10.2005, 10:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress