Zahlensysteme von Register in C

OP #2297051
Lesenswert?

Guten Tag!

Ich arbeite mit dem STM32F107VC, uVision von KEIL.

Ich möchte das Nachladeregister des Timer 1 berechnen (PWM). Ich arbeite 
mit IST und Soll Wert. Es geht um Geschwindigkeit und Distance. Die 
Distance und Geschwindigkeit gebe ich in dezimalen Zahlensystem an. Der 
Ist Wert des Countregisters des Timers ist im Hex Format. Kann dies 
iergendwie umstellen, dass der Countwert in dezimaler Form daherkommt. 
Die Geschwindigkeit ist eben im m/S bereich, bzw. z.B. 7.5 m/s. Diese 
ist als Konstante Festgelegt und es ist nicht sinnvoll in Hex 
umzuwandeln.


Vielen Dank und Gruss!

M.B.
#2297079
Lesenswert?

Es wird vielleicht Zeit für ein gutes C-Buch, falls du auch von C 
redest.

Ja, man kann z.B. schreiben: i = 0x000F + 15;
Auch i = 0x000F + 15 + 0.000000125 geht, wobei dir aber klar sein muß, 
was mit welchem Typ zusammengefasst wird.
In diesem Beispiel wird in int 0x000F zu 15 addiert, dann das Ergebnis 
in eine double gewandelt und 0.000000125 addiert; Ergebnis ist erstmal 
eine double.
Falls i eine int ist, wird diese double dann in eine int gewandelt 
(wobei die Nachkommastellen unter den Tisch fallen) und die int dann an 
i zugewiesen.
OP #2297109
Lesenswert?

Ja, das wusste ich schon, war aber nicht mehr sicher, weil beim debuggen 
die definierten Konstanten einen anderen Wert anzeigen, als ihre 
definierte Grösse. Aber dies bedeutet wahrscheinlich die Datentyp Grösse 
der Konstante und nicht den Zugewiesenen Wert!?


danke und Gruss!

M.B.
Moderator Persönliche Seite #2297178
Lesenswert?

M. B. schrieb:
> Dieser Wert ist bei jeder Konstante gleich!?

Vielleicht hat der Compiler ja die Konstante einfach rausoptimiert
(sie ist ja schließlich per definitionem konstant, also kann er
deren Wert bereits zur Compilezeit überall einsetzen), und der
Debugger ist nur so blöd, dass er dir dafür trotzdem einen Wert
anzuzeigen versucht?

C besitzt kein Konzept echter Konstanten, sondern nur eine Art
"unveränderliche Variable".  Andererseits ist es natürlich dem
Compiler im Rahmen seiner Optimierung freigestellt, nicht benötigte
Variablen wegzuoptimieren.

C++ hingegen besitzt echte Konstanten.  Je nach den Fähigkeiten der
Debug-Informationen und des Debuggers kann der Debugger dir diese
dann entweder gar nicht mehr anzeigen (sind ja keine Variablen), oder
er sollte auch tatsächlich die korrekten Informationen über die
Konstanten vom Compiler weitergereicht bekommen haben.  (Jaja, ich
weiß, bereits Pascal kannte richtige Konstanten. ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren