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).
Lesezeichen