für ein AVR Projekt benötige ich abhängig von der CPU Frequenz unterschiedlichen Programmcode.
wenn ich -dF_CPU=16000000 bei Benutzerdefinierte Einstellungen schreibe, bekomme ich die Fehlermeldung "malformed Parameter"
Wie muß das definiert werden, daß ich Auswertungen in der Art
Kann ich mit dem Wert auch irgenwie rechnen?. Z.b. Wenn ich wissen möchte, wieviele Takte macht der Prozessor in x ms?
Wo ist das denn alles dokumentiert?
Mit Tante Goggle bin ich da nicht wirklich weitergekommen.
Danke theo für die Links. Zum rechnen konnte ich da aber nicht viel finden.
Kann man denn den Wert, der mittels -dF_CPU:=16000000 definiert wurde, irgendwie an eine normale Pascalkonstante bzw. Variable übertragen?
{$ifndef F_CPU}
{$error you must define an CPU frequency} // Das klappt. Wenn F_CPU nicht definiert wurde, kommt hier die Fehlermeldung
{$endif}
procedure wait(ms : dword);
var frequency : dword;
begin
frequency := {$F_CPU}; // illegal expression. Irgendwie muss man doch an den übergebenen Wert rankommen?
...
end;
fliegermichl hat geschrieben: Sa 6. Feb 2021, 12:46
Kann man denn den Wert, der mittels -dF_CPU:=16000000 definiert wurde, irgendwie an eine normale Pascalkonstante bzw. Variable übertragen?
Ist mir nicht bekannt. Vielleicht weiss ein Compiler Guru da mehr.
Aber kannst du das Problem nicht zur Laufzeit lösen, oder wenn du schon unterschiedliche Executables compilierst, wenigstens mit einer wechselnden Konstante im Code, statt mit defines?
Funktionieren tut das nur wenn der Define in Code selber gemacht wird. Über Kompiler kommando nicht.
Wie theo schon sagt, warten bis einer der Guru's hier auftaucht.
theo hat geschrieben: Sa 6. Feb 2021, 14:08
Aber kannst du das Problem nicht zur Laufzeit lösen, oder wenn du schon unterschiedliche Executables compilierst, wenigstens mit einer wechselnden Konstante im Code, statt mit defines?
Eine wechselnde Konstante im Code wäre eine Möglichkeit. Zur Laufzeit geht leider nicht.
Für normale Anwendungen ist das nicht kritisch. Ich bin hier aber gerade dabei die Adafruit Neopixel mit Daten zu versorgen. Da gibt es für beliebig viele hintereinander geschaltete strips nur eine einzige Datenleitung.
Man muß dann für jedes Pixel 24 Bits mit Farbinformationen auf die Leitung setzen und zwar möglichst exakt 1,8 Mikrosekunden/Bit lang.
fliegermichl hat geschrieben: Sa 6. Feb 2021, 12:46
Kann man denn den Wert, der mittels -dF_CPU:=16000000 definiert wurde, irgendwie an eine normale Pascalkonstante bzw. Variable übertragen?
Du musst die Makrounterstützung auf der Kommandozeile mittels -Sm einschalten (Achtung: dieser Parameter muss vor deiner Makrodeklaration kommen). Dann kannst du es einfach wie jedes im Code definierte Makro verwenden: