Hallo,
ich habe ein kleines Programm in C mit dem C18 Compiler für den
PIC18F46K80 geschrieben.
Dabei bin ich auf ein kleines Problem gestoßen.
Ich muss folgende Rechnung lösen:
1 | float tn = ...
|
2 | ...
|
3 | ...
|
4 | for(...
|
5 | {
|
6 | tn = 1.0 / (1.0 / tn + tn * acceleration);
|
7 | }
|
Da der PIC18 aber keine Hardware Unterstützung für Fließkommazahlen hat
wird diese entsprechen langsam gelöst (ca. 2000 Cycle).
Aber ich muss es schaffen diese innerhalb von 1000 Cycle zu lösen.
Ich habe es versucht einfach mit großen Nichtkommazahlen zu
beschleunigen jedoch wurde das ganze nur noch langsamer (3600 Cycle).
1 | tn = (100000000000000 + rest) / (100000000000000 / tn + tn * acceleration);
|
2 | rest = (100000000000000 + rest) % (100000000000000 / tn + tn * acceleration);
|
Ich musste zusätzlich noch den Rest mitberechnen um die Genauigkeit zu
steigern.
Sieht jemand Möglichkeiten die Rechnung effizienter zu gestalten?
tn liegt im Mikrosekunden Bereich und wird benötigt um einen Timer zu
initialisieren.
Ich betreibe den PIC mit eine 50MHz Oscillator.
Ich frage mich aber auch ob das an dem C18 compiler liegt, da ich nur
die Free Version habe(Wenn ich mir manchmal den erzeugten Assembler Code
ansehe schmeißt der Compiler da ganz viel unnötige Operationen rein um
den Code un effizienter zu machen).
Das ärgert mich bei den PIC Mikrocontrollern, dass es keine vernünftigen
Compiler umsonst (Oder auch für kleine Preise bis 80 Euro) gibt mit dem
man Effizienten Maschinencode erzeugen kann.
Hat jemand Erfahrung mit anderen Mikrocontrollern bei denen es
effiziente Compiler umsonst gibt oder gibt es vielleicht doch noch einen
effizienteren Compiler für die PICs?