8051 und float

Gast #7145563
Lesenswert?

Musste ein Projekt wegen M4F Nichtverfügbarkeit auf einen C8051 
portieren und habe gedacht, ich muss float durch Fixed Point ersetzen.

Aber alles funktioniert auch so und ist schnell genug. Im Debugger sieht 
man was z.B. bei einer float Division passiert, die beiden float werden 
in jeweils 4 Register gepackt, damit ist alles voll, und dann kommt ein 
FPDIV, das ohne mein zutun gelinkt wurde. Kann man so lassen :-)
Gast #7145655
Lesenswert?

Lothar schrieb:
> Musste ein Projekt wegen M4F Nichtverfügbarkeit auf einen C8051
> portieren und habe gedacht, ich muss float durch Fixed Point ersetzen.
>
> Aber alles funktioniert auch so und ist schnell genug. Im Debugger sieht
> man was z.B. bei einer float Division passiert, die beiden float werden
> in jeweils 4 Register gepackt, damit ist alles voll, und dann kommt ein
> FPDIV, das ohne mein zutun gelinkt wurde. Kann man so lassen :-)

sorry, vielleicht bin ich etwas Hirnlahm am Montag Morgen. Aber was ist 
die Information bzw. Neuigkeit: "Ein Compiler [C-Compiler? Welcher? 
Welche Version?] für den 8051 ist in der Lage halbwegs effizient Float 
zu berechnen und linkt dafür selbstständig benötigte Libs?"

Habe ich etwas übersehen?

Gruß
Gast #7145664
Lesenswert?

Die freudige Botschaft kommt 30 Jahre zu spät.

Wie groß ist das Programm? 16k, 32k oder etwa noch mehr?
Wenn ein M4F durch einen 8051 ersetzt werden kann, gab es vorher 
vermutlich kein gravierendes Problem bei der Ausführungsgeschwindigkeit.
Gast #7145671
Lesenswert?

> Habe ich etwas übersehen?

Wie koennten jetzt einfach mal behaupten das sowas mit einem
MCS48 unmoeglich gewesen waere. Dann springen sofort zehn Opas
aus dem Gebuesch und beweisen das Gegenteil. :-D

> gab es vorher vermutlich kein gravierendes Problem bei der
> Ausführungsgeschwindigkeit.

Genau. Solange man kein Zeitprobleme hat und man genug Speicher fuer
die Libarie ist das doch Spielkram.
Es kann aber natuerlich sein das die Schaltung dann nicht mit
mit einer CR2032 funktioniert sondern zwei Monozellen braucht weil
eine moderne CPU halt 90% im Sleepmode rumhaengen kann wo so eine
alte Schnoerkel-MCU 100% schwitzt.

Olaf
Gast #7146006
Lesenswert?

PittyJ schrieb:
> Was ist jetzt also das aufregende an eine FP-Library für den 8051?

Hatte einfach vorher noch nie auf 8051 float genutzt und war halt 
überrascht dass es geht :-) Sogar echte 32-Bit Single Precision, nicht 
sowas:

https://en.wikipedia.org/wiki/Bfloat16_floating-point_format

Schon Immer schrieb:
> Wie groß ist das Programm? 16k, 32k oder etwa noch mehr?

Ist ein C8051F580 mit 128k das Programm ist so 32k gibt aber noch so 64k 
const Tabellen. Da ich dieses 8051 Banking nicht verstehe und auch nicht 
lernen wollte, habe ich für die const Tabellen einfach ein Wrapper Makro 
gemacht ähnlich AVR pgm_read_byte_far

> Wenn ein M4F durch einen 8051 ersetzt werden kann, gab es vorher
> vermutlich kein gravierendes Problem bei der Ausführungsgeschwindigkeit

Solange der M4F lieferbar war, wusste das aber niemand :-)
Gast #7146055
Lesenswert?

Lothar schrieb:
> Schon Immer schrieb:
>> Wenn ein M4F durch einen 8051 ersetzt werden kann, gab es vorher
>> vermutlich kein gravierendes Problem bei der Ausführungsgeschwindigkeit
>
> Solange der M4F lieferbar war, wusste das aber niemand :-)

Moin,

Du meinst eher "Solange der M4F lieferbar war, interessierte das aber 
niemand" ;-)

Bei einem Arm Cortex-M4 sollte der SWO Pin und / oder ein ETM Interface 
zur Verfügung stehen und darüber kann man mit passendem 
Debugger-Support, bzw. passender Debug-Probe ein Profiling der 
Applikation durchführen, um zu sehen:
- wie viel Reserve man bei der Rechenleistung für spätere 
Funktionserweiterungen hat
- ob z.B. das Interrupt-Handling "auf Kante genäht" ist
- wie lange man die CPU in Sleep schicken kann, um Energie zu sparen 
(wie von Olaf bereits erwähnt)
- ...

Beim 8051 sind die Möglichkeiten des Profilings in Hardware eher 
"übersichtlich", da hier ein performantes Debug-Interface fehlt. Das C2 
des C8051F580 sollte etwas besser sein, als klassisches JTAG, aber im 
Zweifelsfall muss dann ein Simulator herhalten...

Gruß,
Michael
Gast #7146150
Lesenswert?

Cartman schrieb:
>> Da ich dieses 8051 Banking nicht verstehe und auch nicht
>> lernen wollte

Es gibt sogar eine App Note mit Beispielen. Davon verstehe ich das 
manuelle Banking, aber nicht das automatische Banking. Vor allem 
verstehe ich nicht, warum das automatische Banking nicht einfach so 
funktioniert:

main und Shared Libs in Bank 0 = Common Bank
Modul 1 in Bank 1
Modul 2 in Bank 2
Modul 3 in Bank 3

main startet Modul 1, das macht was es soll, und macht dann eine Art 
yield

main macht einen Context Switch und wechselt von Bank 1 nach Bank 2 und 
startet Modul 2 usw.

Also Cooperative Multitasking ohne MMU

Dann kann zwar kein Modul >32k sein, aber das ist bei vielen RTOS auch 
so.

https://www.silabs.com/documents/public/application-notes/an143.pdf

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