Siehe Post #19.Wenn du F_CPU 32MHz hast, kommt für BSEL 399.999 raus, geht also nicht. Max zulässig wären BSEL 4095d (12bit, 0xFFF).
Habe es den Rechner ausrechnen lassen und dabei evtl. ein casting Problem gehabt?
Siehe Post #19.Wenn du F_CPU 32MHz hast, kommt für BSEL 399.999 raus, geht also nicht. Max zulässig wären BSEL 4095d (12bit, 0xFFF).
GCC hat Unmengen von Schaltern. So wie man mit einem Schalter einstellen kann, daß das Assemblerlisting nicht gelöscht wird, gibt es bestimmt auch einen Schalter, der dafür sorgt, daß die Ausgabe des Präprozessors nicht gelöscht wird. In dieser Datei wirst Du dann alle Berechnungen finden. (Zugegeben, die GCC-Ausgaben sind etwas gewöhnungsbedürftig. Maschinenlesbar eben nicht so gut menschenlesbar...)In dem Zusammenhang hat mich mal geärgert, daß man im Studio beim kompilieren zwar Warnings und Errors werfen lassen kann, aber dabei leider keine berechneten Compilerkonstanten ausgeben lassen kann...
Nein. Der Standardtyp int ist maschinenabhängig, d.h. bei AVR 16 Bit breit.muss ich alles was größer als int ist bei nem #define casten?
#define F_CPU 32000000ULum dem Präprozessor mitzuteilen, daß er die Zahl als unsigned long interpretieren soll.
#define F_CPU ((uint32_t) 32000000)
Nein, das meine ich nicht. Ich bleib ja bei Assembler.GCC hat Unmengen von Schaltern. So wie man mit einem Schalter einstellen kann, daß das Assemblerlisting nicht gelöscht wird, gibt es bestimmt auch einen Schalter, der dafür sorgt, daß die Ausgabe des Präprozessors nicht gelöscht wird. In dieser Datei wirst Du dann alle Berechnungen finden.
Sorry aber was ist daran unleserlicher?Damit weichst Du aber vom anerkannten guten Programmierstil ab, d.h. Du machst Dein Programm damit für andere weniger leicht lesbar.
Das geht schon, aber vielleicht nicht ganz so, wie Du es Dir vorstellst. Den tatsächlichen Zahlenwert bekommst Du nur außerhalb des Compilers, z.B. mit grep aus der Ausgabedatei des Präprozessors.Als Tüpfelchen auf dem "i" wollte ich dann den Baudratenfehler beim Compilieren auswerfen lassen - mit der .message-Direktive. Oder ggf der .warning-Direktive. Und das geht eben nicht. AFAIR konnte ich zwar mit bedingter Compilierung was ausgeben lassen, aber den tatsächlichen Fehler (also den Zahlenwert) eben nicht.
#define BAUD 9600UL #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) #if ((BAUD_ERROR<990)|(BAUD_ERROR>1010)) #error Baudrate Fehler > 1 % #endifEO OT
Niemand hat irgendetwas von unleserlich gesagt. Ich kenne nur niemanden, der es so macht...was ist daran unleserlicher?
Erzeugt beim Versuch der Compilierung bei mir folgenden Error:Das geht schon, aber vielleicht nicht ganz so, wie Du es Dir vorstellst.