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 :-)
Wenn der Divisor eine Konstante ist, kann man auch mit dem Kehrwert multiplizieren. Ist etwa 4* schneller.
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ß
Lothar schrieb: > Aber alles funktioniert auch so und ist schnell genug. Gut. Fertig! Nächstes Problem, bitte.
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.
Naja, schon der ZX81 (vor 40 Jahren, OMG) mit 8KB ROM hatte einen FPU-Emulator im Basic ;)
> 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_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 :-)
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.
> Da ich dieses 8051 Banking nicht verstehe und auch nicht > lernen wollte http://hcs.sourceforge.net/docs/The_Final_Word_on_the_8051.pdf Lesen bildet!
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.