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 :-)
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ß
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.
> 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
Georg A. schrieb:> Naja, schon der ZX81 (vor 40 Jahren, OMG) mit 8KB ROM hatte einen> FPU-Emulator im Basic ;)
War auch mein erster Gedanke. Ich hatte sogar einen ZX81. Und er konnte
auch gleichzeitig noch einen Fernseher bedienen.
Was ist jetzt also das aufregende an eine FP-Library für den 8051?
> Was ist jetzt also das aufregende an eine FP-Library für den 8051?
Ein LC-Meter nach dem Verstimmungsprinzip passt in einen kleinen 2051.
Falls der dir "altersbedingt" nicht sagt: 2 kByte Flash.
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_formatSchon 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 :-)
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
Ich hab float auf dem AT89C2051 gerne benutzt. Die 4 Grundrechenarten
benötigen etwa 1kB. Man hat also noch 1kB für die Applikation. Und wenns
klemmt, der AT89C4051 hat 4kB Flash.
Und falls man den Turbo braucht, einfach den AT89LP4052 rein.
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