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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.