Float Variable auf 16Bit Microcontroller

iceman21

Admiral Special
Mitglied seit
11.11.2001
Beiträge
1.919
Renomée
9
Ich bin momentan völlig verunsichert oder besser gesagt verwirrt.
In einem Projekt muss ich auf nem 16Bit Microcontroller mit floats arbeiten komme aber
auf keinen grünen Zweig, da ich mir nicht sicher bin was der MC mit Zahlen wie bspw.
1200000 anstellt.
Daher meine Frage, kann ein 16 Bit MC ohne größere Probleme mit Zahlen größer 2^16 umgehen?

Schon mal danke für hilfreiche Antworten
 
Daher meine Frage, kann ein 16 Bit MC ohne größere Probleme mit Zahlen größer 2^16 umgehen?
Wenn du nicht gerade in Assembler programmierst, dann sollte es auch einfach möglich sein. Einfach mal einen Blick in die Beschreibung des Compilers werfen (C?).

Auch in Assembler ist das natürlich möglich. Hier sollte man dann aber irgendeine passende lib nachnutzen.
 
Wäre mal interessant, um welchen Controller es sich handelt.

Und die Frage, ob der Controller zahlen > 2^16 verarbeiten kann, ist für Float irrelevant, das interessiert nur bei Ganzzahlarithmetik.

Floating Point wird völlig anders abgespeichert.

Im übrigen läßt sich auch auf nem 8-Bitter (ich bastel da grade ein wenige mit Atmel AVRs rum) bei Ganzzahlarithmetik mit Zahlen > 2^8 arbeiten. Muß man dann halt die Zahlen auf mehrere Register verteilen und passend drauf zugreifen.

Cherry
 
Und die Frage, ob der Controller zahlen > 2^16 verarbeiten kann, ist für Float irrelevant, das interessiert nur bei Ganzzahlarithmetik.

Floating Point wird völlig anders abgespeichert.
Wenn ich mal davon ausgehe, dass der Controller keine Floating Point Unit (FPU) hat, dann muss jede Float-Berechnung auf Ganzzahlarithmetik zurückgeführt werden. Da bei einer 32-Bit Float-Zahl die Mantisse typischerweise 23 Bit lang ist, ist die Frage nicht so abwegig ;)
 
C Compiler vorausgesetzt, sollte es keine Probleme mit Floats bei einer 16 Bit MCU geben.
In zeitkritischen Bereichen und Interrupts sollte man aber auf Float-Berechnungen und vor allem auf Aufrufe von Funktionen einer Float-Bibliothek verzichten - je nach Anwendungsfall.
Wenn es also z.B. darum geht, per Interrupt vom A/D-Wandler gelesene Samples mit Floatingpoint-Arithmetik weiter zu bearbeiten, so sollte man dies ausserhalb der ISR tun.

BTW: Auch unter 16 Bit DOS wurde Floatingpoint-Arithmetik genutzt.
 
Wenn ich mal davon ausgehe, dass der Controller keine Floating Point Unit (FPU) hat, dann muss jede Float-Berechnung auf Ganzzahlarithmetik zurückgeführt werden. Da bei einer 32-Bit Float-Zahl die Mantisse typischerweise 23 Bit lang ist, ist die Frage nicht so abwegig ;)
:-) Deswegen die Frage nach dem konkreten Controller. Und wie erwähnt: man kann auch eine 32-Bit-Zahl in 2 16-Bit-Registen speichern. Dann wird aber halt das Handling entsprechend umständlich. Das dann noch in Assembler zu hacken ist nichtmehr lustig.

Wobei mich bei genauerem Nachdenken nebem dem verwendeten Controller doch mal interessieren würde, was das für ein Projekt ist, bei dem man auf nem µC unbedingt FP braucht.

Cherry
 
Zuletzt bearbeitet:
Erstmal danke für die bisherigen Antworten.

Bei dem Controller handelt es sich um den weltbekannten C167, allerdings in einer Industriesteuerung verbaut. Als Compiler wird der aktuelle Tasking Ede eingesetzt.

Aus gewissen Gründen, darf ich nicht mehr sagen, außer das es sich bei dem Projekt um Software für ne Industriesteuerung handelt.

edit: Hin und wieder sollte man doch Handbücher zur Hilfe nehmen und sich nicht auf Aussagen anderer verlassen. Es gibt in meinem Fall keine FPU...
Also alles auf andere Art lösen und die alte Software umschreiben... :(
 
Zuletzt bearbeitet:
Erstmal danke für die bisherigen Antworten.
Bei dem Controller handelt es sich um den weltbekannten C167, allerdings in einer Industriesteuerung verbaut. Als Compiler wird der aktuelle Tasking Ede eingesetzt.
C167 Derivate und die Tasking Tool Chain habe ich hier seit fast 10 Jahren im Einsatz.
Bei Fragen einfach fragen. ;)
Aus gewissen Gründen, darf ich nicht mehr sagen, außer das es sich bei dem Projekt um Software für ne Industriesteuerung handelt.
Klar doch. Musst halt bei Problemfragen nur richtig formulieren, ohne was zum konkreten Projekt zu verraten. Unsere C167 cores sitzen z.B. in Chips, welche ich hier auch nicht näher nennen kann/darf.
edit: Hin und wieder sollte man doch Handbücher zur Hilfe nehmen und sich nicht auf Aussagen anderer verlassen. Es gibt in meinem Fall keine FPU...
Also alles auf andere Art lösen und die alte Software umschreiben... :(
Wie, bestehende SW läuft auf einem Controller mit FPU und das Ganze ist auf einen C167 zu portieren?
 
C167 Derivate und die Tasking Tool Chain habe ich hier seit fast 10 Jahren im Einsatz.
Bei Fragen einfach fragen. ;)
Ok, danke für das ANgebot. Werde sichelrich noch darauf zurückkommen

Wie, bestehende SW läuft auf einem Controller mit FPU und das Ganze ist auf einen C167 zu portieren?
Nein, die bestehende Software läuft bereits seit längerem mit float-Variablen auf einem C167. Allerdings ist vermutlich durch unheimlich viel Glück bisher nichts passiert und der Fehler eben erst vor paar Tagen aufgetreten...
 
1.) Wie große Zahlen bzw. ob ein Mikrocontroller Fließkommazahlen verarbeiten kann, hängt nur vom Compiler ab. Eine 32 Bit CPU kann genauso gut 64 Bit Zahlen verarbeiten. Unter C gibt es hier die Variablen char, short, int, long, long long und je nach Compiler sind die jedes Mal unterschiedlich breit, wobei ein Integer immer der Maschine entspricht (z.B. 32 Bit Maschine->32 Bit Integer). Auf einem 32 Bit System sind es meistens 8/16/32/32/64 Bit.
Wenn ein Mikrocontroller keine Fließkommazahlen unterstützt, dann muss das der Compiler eben emulieren. Das ist zwar extrem langsam, aber es läuft, sonst darf sich der Compiler nicht C Compiler nennen.
 
Zurück
Oben Unten