Typumwandlung long nach int

Gast #426983
Lesenswert?
• ▲
▼
Halo habe eine Frage für das Programmieren von Mikrocontrollern in C.
Benutze einen 16bit Controller.
Habe einen Timerwert der 16bit breit ist.
Nun kommt es im programm vor das ich zwei Timerwerte addieren muß, diese 
können dann natürlich größer werden als int also habe ich ie vARIABLE 
in die addiert wird als long ausgelegt.
Nun muß ich diese Variable aber wieder als Integer haben wie stelle ich 
das an ?
Gast #426990
Lesenswert?
• ▲
▼
das geht natürlich nicht ohne Informationsverlust.
Entweder benutzt du nur die unteren 16bit (dass passiert automatisch, 
wenn du die long-Variable in eine Int-Variable schreibst), oder du 
teilst vorher durch 2 (>>1).
Warum muss es denn wieder eine Int-Zahl sein?
Gast #427000
Lesenswert?
• ▲
▼
Also mein großes problem ich möchte eine frequenzmessung aufbauen. Nutze 
dazu die Input Capture Unit.
Bei jedem Interrupt soll der Aktuelle Timerwert in den Speicher 
geschrieben werden, welcher 5 Speicherplätze hat.
Dann bilde ich von diesen Werten differenzen und mittel anschließend.
Darauf folgt die übertragung per Can. das prozedere finktioniert schon 
für meine ADC Messwerte aber nicht bei der ICU. Gebe schon feste werte 
zum speicher an, wo ja eigentlich am Ende Null bei rumkommen müsste!
Aber es kommen ewig unheimlich große Zahlen dabei rum nur Schwachsinn 
und ich weiß nicht nmehr weiter.
Gast #427009
Lesenswert?
• ▲
▼
na, das ist doch gar kein Problem:
Bei jeder Messung bildest du direkt die Differenz aktueller_Timerstand - 
letzter_Timerstand. Das ergibt in jedem Fall eine Int-Zahl, die auch 
dann richtig ist, wenn zwischenzeitlich der Timer einmal überläuft. Die 
Differenzen speicherst du in einem Int-Feld. Dann die letzten 5 als long 
addieren, anschliessend durch 5 teilen, dann hast du wieder eine Zahl, 
die nie grösser als 65535 ist.

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.