Forum: Mikrocontroller und Digitale Elektronik Ein Lob an die Cortex M4 mit FPU :)


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Krasse Dinger ... Obwohl (in meinem Fall STM32F429) "nur" 168MHz läuft 
da MP3+Dynamic-Compressor+10Band Equalizer (nebenbei noch lesen von 
SD-Karte) in wahnsinnig viel schneller als Echtzeit auf den Dingern ... 
Und das mit float-Genauigkeit (bis auf MP3 natürlich^^) FPU ist schon 
echt ein nettes Feature :)

Respekt :)

*edit*: Und an den GCC, der brav die FPU-Instruktionen generiert und 
auch MAC-Operationen erkennt und per Loop-Unrolling alle FPU-Register 
effizient verwendet :)

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

Ja, die MCU ist ganz schön flott.

Welchen Decoder hast Du denn verwendet?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Markus schrieb:
> Welchen Decoder hast Du denn verwendet?

Hatte den Standard-Helix-Decoder verwendet :)

von Stefan F. (Gast)


Lesenswert?

Ich hatte damals meinen 386er PC mit einer i80387 FPU aufgerüstet. Für 
die benchmarks hat das einen Riesen Vorteil gebracht. Für die Praxis 
allerdings eher weniger, weil 90% meiner Programme nicht darauf 
vorbereitet waren.

Wie dem auch sei, so eine FPU ist eine praktische Sache. Wenn man eine 
hat, kann man sich einige un-intuitive Ersatz-Konstrukte ersparen.

von Heinz (Gast)


Lesenswert?

Dynamischer Compressor und 10 Band EQ wäre eher was für einen DSP als 
für die FPU ;) Da könnte die Taktrate noch viel geringer sein und alles 
würde passen.

von Mampf unterwegs (Gast)


Lesenswert?

Heinz schrieb:
> Dynamischer Compressor und 10 Band EQ wäre eher was für einen DSP
> als für die FPU ;) Da könnte die Taktrate noch viel geringer sein und
> alles würde passen.

Haha, jo.... Und dann müsste man sich nicht ständig fragen, wieso mab so 
ein board mit 32mb sdram selbstgebaut hat, anstatt einen raspberry pi 
zero zu verwenden xD

... Oder gleich ein fertiges android handy und nur die software zu bauen 
xD

von Ivan Ivanovic Ivanovski (Gast)


Lesenswert?

Mampf unterwegs schrieb:
> ein board mit 32mb sdram selbstgebaut hat, anstatt einen raspberry pi
> zero zu verwenden xD

Oder sowas: 
https://www.indiegogo.com/projects/licheepi-zero-6-extensible-linux-module-on-finger-wifi-diy/x/14929614#/ 
:D

von tja (Gast)


Lesenswert?

Ivan Ivanovic Ivanovski schrieb:
> Mampf unterwegs schrieb:
>> ein board mit 32mb sdram selbstgebaut hat, anstatt einen raspberry pi
>> zero zu verwenden xD
>
> Oder sowas:
> 
https://www.indiegogo.com/projects/licheepi-zero-6-extensible-linux-module-on-finger-wifi-diy/x/14929614#/
> :D

Respekt an den TO - der hat's erkannt wie der Hase läuft. Die Welt 
besteht eben nicht nur aus den fertig Dingern! Und ich wette, dass der 
TO auch sehr viel schneller seiner erste MP3 abspielen kann. Er muss 
nicht warten, bis sich erstmal ein Linux gebootet hat.

von Markus (Gast)


Lesenswert?

>Oder sowas:
>https://www.indiegogo.com/projects/licheepi-zero-6...
>:D

Ein schönes Board.
Allerdings bin auch ich der Meinung, dass nicht überall ein 
Betriebssystem laufen sollte, weil es so viel Nachteile hat:

- Bootzeit
- Stromverbrauch
- Updates
- Zerschießen der SD-Karte bei Power Down
- Komplexität

Ich bevorzuge eine Startzeit von 1ms bei meinen Applikationen, das fühlt 
sich sehr angenehm an.

von tzhgfhgrhzfghz6453454353453534534533453453 (Gast)


Lesenswert?

dann jetzt auf einen M7 upgraden und freuen das der quatsch 3x laufen 
kann ^^
bin auch immer wieder erstaunt was die M4/M7 so können.

Ich habs momentan eher mit Videostreaming( LAN) + USB und so ^^

von STM Apprentice (Gast)


Lesenswert?

tzhgfhgrhzfghz6453454353453534534533453453 schrieb:
> bin auch immer wieder erstaunt was die M4/M7 so können.

... und ich jammer schon 'rum dass die FPU nur 32-bittig ist ...

von Mampf F. (mampf) Benutzerseite


Lesenswert?

tja schrieb:
> Und ich wette, dass der
> TO auch sehr viel schneller seiner erste MP3 abspielen kann. Er muss
> nicht warten, bis sich erstmal ein Linux gebootet hat.

Ja, und das geht sogar erstaunlich schnell ... Innerhalb 2 Sekunden ist 
das Ding up-and-running - inklusive vollgefülltem Audio-Puffer mit 
MP3-dekodieren, Dynamik-komprimierten und "equalisierter" Daten für rund 
30 Sekunden Spielzeit! :)

Kann man die Raspies nicht Bare-Metal programmieren?^^

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Mampf F. schrieb:
> Krasse Dinger ... Obwohl (in meinem Fall STM32F429) "nur" 168MHz läuft
> da MP3+Dynamic-Compressor+10Band Equalizer (nebenbei noch lesen von
> SD-Karte) in wahnsinnig viel schneller als Echtzeit auf den Dingern ...

naja 168MHz?? auf dem AVR32 mit DSP+FPU ging das auch bei relativ 
mageren 66MHz, schade dass atmel damals es vergeigt hatten diesen Core 
zu einem Standard zu etablieren...zu dem Zeitpunkt gab es noch nichtmal 
eine CortexM4 CPU auf dem Markt... da gab es nur ARM7 und erste Ansätze 
von Luminary, die ja regelrecht selbst nach TI Übernahme gescheitert 
ist. ist halt manchmal so, dass sich nicht unbedingt das bessere System 
durchsetzt, sondern da wo viel mehr Lobby und Marketing betrieben wird

von Uwe N. (ex-aetzer)


Lesenswert?

Mampf F. schrieb:

> Kann man die Raspies nicht Bare-Metal programmieren?^^

Klar - Kinderspiel ;)

Falls Du es ernst meinst:
https://www.gitbook.com/book/arobenko/bare_metal_cpp/details

von Markus (Gast)


Lesenswert?

>dann jetzt auf einen M7 upgraden und freuen das der quatsch 3x laufen
>kann ^^

Falls Du damit meinst, dass ein F7 ca.3x schneller als ein F4 läuft, 
dann würde ich sagen: eher nein.

Das Apfelmänchen lässt sich aber schon in ca. 1 Sekunde rechnen:
Beitrag "Re: STM32F746 Discovery ARDUINO"

von Christopher J. (christopher_j23)


Lesenswert?

STM Apprentice schrieb:
> tzhgfhgrhzfghz6453454353453534534533453453 schrieb:
>> bin auch immer wieder erstaunt was die M4/M7 so können.
>
> ... und ich jammer schon 'rum dass die FPU nur 32-bittig ist ...


Beim Cortex-M7 ist sie zum Teil 64-bittig.

von Markus (Gast)


Lesenswert?

>Beim Cortex-M7 ist sie zum Teil 64-bittig.

Was heißt "zum Teil" ?

von Karl (Gast)


Lesenswert?

AFAIK kann sich das der Hersteller raussuchen.

von Jobst M. (jobstens-de)


Lesenswert?

Stefan schrieb:
> ist halt manchmal so, dass sich nicht unbedingt das bessere System
> durchsetzt

In diesem Fall aber gottseidank schon ... :-)

Gruß
Jobst

von Christopher J. (christopher_j23)


Lesenswert?

Markus schrieb:
>>Beim Cortex-M7 ist sie zum Teil 64-bittig.
>
> Was heißt "zum Teil" ?

Karl schrieb:
> AFAIK kann sich das der Hersteller raussuchen.

Jo, selbst beim STM32F7 gibt es welche mit double-precision und welche 
mit single-precision FPU. Die dickeren Modelle mit 512K RAM haben alle 
eine double-precision FPU und die "kleineren" Modelle mit 320K RAM und 
weniger haben eine single-precision FPU.

Markus schrieb:
> Falls Du damit meinst, dass ein F7 ca.3x schneller als ein F4 läuft,
> dann würde ich sagen: eher nein.

Mit 64bit FPU und dem höheren Takt gegenüber den F4 kommt der Faktor 
drei durchaus hin, eventuell mehr und eventuell weniger, je nach 
Anwendungsfall natürlich.

von Mmhm (Gast)


Lesenswert?

Mampf F. schrieb:
> Krasse Dinger ... Obwohl (in meinem Fall STM32F429) "nur" 168MHz läuft
> da MP3+Dynamic-Compressor+10Band Equalizer (nebenbei noch lesen von
> SD-Karte) in wahnsinnig viel schneller als Echtzeit auf den Dingern ...
> Und das mit float-Genauigkeit (bis auf MP3 natürlich^^) FPU ist schon
> echt ein nettes Feature :)
>
> Respekt :)
>
> *edit*: Und an den GCC, der brav die FPU-Instruktionen generiert und
> auch MAC-Operationen erkennt und per Loop-Unrolling alle FPU-Register
> effizient verwendet :)

Das ist ein Microcontroller. Um mal einen Autovergleich zu bemühen: 
Unter der Klasse "Fahrzeuge" ist der F4 höchstens ein Bobbycar.

Wenn man Performance braucht, sollte man einen richtigen Prozessor 
einsetzen. Da fang ich doch mal klein an, und schlag mal einen i.MX6 
vor.
Selbst gegen das allerkleinst Derivat muss ist der F4 so klein mit Hut, 
da bleibt nichts mehr ;-)

https://cache.freescale.com/files/32bit/doc/fact_sheet/IMX6SRSFS.pdf

Jetzt ist der i.MX6 selber aber auch nicht wirklich eine Rakete, aber 
das Verhältnis Elektrische Leistung <> Performance und Kosten <> 
Performance ist um Welten besser als beim F4.

Merke:
Die Kernkompetenz von Microcontrollern ist NICHT die Performance. Und zu 
Microcontrollern zählt auch der F4.

von ja aber (Gast)


Lesenswert?

>Die Kernkompetenz von Microcontrollern ist NICHT die Performance.
>Und zu Microcontrollern zählt auch der F4.
Aber zum Beispiel auch der 8051 oder der ATtiny13a.
Und im Vergleich dazu ist der STM32F4 ganz schön flott.
Mit uCs der Cortex-M Serie ist heute einiges möglich, was vor einiger 
Zeit anderen Leistungsklassen vorbehalten war.

von olaf (Gast)


Lesenswert?

> Mit uCs der Cortex-M Serie ist heute einiges möglich, was vor einiger
> Zeit anderen Leistungsklassen vorbehalten war.

Sagen wir mal lieber damit ist heute das moeglich was vor 10Jahren schon 
mit den Renesas SHs moeglich war.

Olaf

von Markus (Gast)


Lesenswert?

>Markus schrieb:
>> Falls Du damit meinst, dass ein F7 ca.3x schneller als ein F4 läuft,
>> dann würde ich sagen: eher nein.

>Mit 64bit FPU und dem höheren Takt gegenüber den F4 kommt der Faktor
>drei durchaus hin, eventuell mehr und eventuell weniger, je nach
>Anwendungsfall natürlich.

Der Test aus der Praxis ergibt knapp den Faktor 2:

Single Precision Whetstones:
STM32F4   Discovery@168Mhz  ==> 109.05 MIPS
STM32F746 Discovery@216Mhz ==> 202.84 MIPS

von
Beitrag "Re: Benchmark für Arduino-Boards?"

Aber immerhin verwunderlich, dass der F7 Faktor 2 schafft, bei dem 
geringen MCLK Unterschied.
Es kann ja eigentlich nur durch besseren Cash und Piplininig erreicht 
werden, oder?

von olaf (Gast)


Lesenswert?

> Es kann ja eigentlich nur durch besseren Cash und Piplininig erreicht
> werden, oder?

Renesas SH7750 430Mips bei 240Mhz und FPU 1.7 GFLOPS.
Vorteilhaft duerfte da wohl das bessere Ram sein. Die ARM-Teile brauchen 
ja immer Waitstates ohne Ende.

Ich verstehe garnicht das immer alle mit so langsamen Kisten rum machen 
wenn sie angeblich Speed brauchen. :-)

Olaf

von Philippus (Gast)


Lesenswert?

Mmhm schrieb:
> Merke:
> Die Kernkompetenz von Microcontrollern ist NICHT die Performance. Und zu
> Microcontrollern zählt auch der F4.

Oder Die STM32F0.. was da alles in einem TSSOP20 bei 48Mhz versteckt 
ist, kann man auch schon kaum glauben.. obwohl es natürlich teils normal 
ist.

DMA,mehrere SPI,I2C,Usarts, USB(Opt.), 5 16bit Timer,9ADC Channels, 
RTC.........u.s.w

von olaf (Gast)


Lesenswert?

> DMA,mehrere SPI,I2C,Usarts, USB(Opt.), 5 16bit Timer,9ADC Channels,
> RTC.........u.s.w

Warum ist das unglaublich? Letztlich sind das auch nur ein paar 
geschickt verschaltete Register. Ausserdem hatten das die Japaner auch 
schon vor 15Jahren in ihren Controllern. Hat hier nur keiner 
wahrgenommen.

Unglaublich wird es wenn man sieht wieviel Ram man heute in den 
Controllern bekommt. Das ist dann wohl die direkte Folge davon das man 
kleinere Prozesse anwendet. Dafuer geht dann aber auch kein 5V mehr.

Oder schaut euch mal das Konzept der TPU bei den steinalten 68332 an. Da 
frag ich mich immer wieso sich das nicht mehr durchgesetzt hat. Hat 
vermutlich den durschnittlichen Entwickler ueberfordert.

Olaf

von Philippus (Gast)


Lesenswert?

olaf schrieb:
> Warum ist das unglaublich?

Unglaublich fantastisch sowas für 1 Euro als Hobbyist mit 
Minimalbeschaltung programmieren zu können. Was es gab und geben wird 
und wieso es so ist wie es ist weiß ich auch.

Wenn ich hier eine 200mx100m große Maschine ansehe mit 8 großen reinen 
Serial Terminals und irgendwas Richtung Z80 als Rechenwerk, RS422 
Convertern, einafchen IO Karten finde ich das heute auch noch ein große 
Leistung.. So einfach nachzubauen, aber heute würde ein riesen Aufriss 
mit einer SPS-Steuerung die bestimmt mehrere Schalträume ausfüllen würde 
gemacht werden, dazu noch die ganz wichtigen Entwicklungskosten für die 
tollen Monitorbildchen.

von Jack (Gast)


Lesenswert?

Mmhm schrieb:
> Das ist ein Microcontroller.

Ja, ein kleines Arbeitspferd, dass man unauffällig dort einbaut und 
rackern lässt, wo man es braucht.

> Um mal einen Autovergleich zu bemühen:
> Unter der Klasse "Fahrzeuge" ist der F4 höchstens ein Bobbycar.

Nein, da ein Microcontroller weit über dem Niveau eines Spielzeugs 
liegt.

> Wenn man Performance braucht,

Performance ist nur ein Schlagwort. Ein Ingenieur quantifiziert was er 
braucht und nimmt das richtige Werkzeug für die Aufgabe.

> sollte man einen richtigen Prozessor
> einsetzen. Da fang ich doch mal klein an, und schlag mal einen i.MX6
> vor.
> Selbst gegen das allerkleinst Derivat muss ist der F4 so klein mit Hut,
> da bleibt nichts mehr ;-)

Könntest du deinen Geschlechtsteilgrößenvergleich woander machen? Danke.

von tzhgfhgrhzfghz6453454353453534534533453453 (Gast)


Lesenswert?

Markus schrieb:
>>dann jetzt auf einen M7 upgraden und freuen das der quatsch 3x laufen
>>kann ^^
>
> Falls Du damit meinst, dass ein F7 ca.3x schneller als ein F4 läuft,
> dann würde ich sagen: eher nein.

hmm frage ist ja wie weit der M4 jetzt schon ausgelastet ist.
mit RTOS kann man das ja fix anzeigen lassen
Generell sind das aber schöne arbeitstierchen ...

Und etwas reserve ist sicher nicht falsch!!

denn auch ein "blinky" auf einem Linux raspi ist dolle daneben ^^

von Markus (Gast)


Lesenswert?

Die Loesung hatten wir aber schon
Beitrag "Re: Ein Lob an die Cortex M4 mit FPU :)"

von RAc (Gast)


Lesenswert?

Markus schrieb:
>
> von
> Beitrag "Re: Benchmark für Arduino-Boards?"
>
> Aber immerhin verwunderlich, dass der F7 Faktor 2 schafft, bei dem
> geringen MCLK Unterschied.
> Es kann ja eigentlich nur durch besseren Cash und Piplininig erreicht
> werden, oder?

Bingo. Die Hauptneuerung vom F7 gegenüber dem F4 ist eine 6 stage 
Pipeline, die recht finegetuned Parallelisierung auf Zyklenebene 
vornehmen kann. Hatten wir aber schon Mal...

von Mmhm (Gast)


Lesenswert?

Jack schrieb:
> Mmhm schrieb:
>> Das ist ein Microcontroller.
>
> Ja, ein kleines Arbeitspferd, dass man unauffällig dort einbaut und
> rackern lässt, wo man es braucht.
>
>> Um mal einen Autovergleich zu bemühen:
>> Unter der Klasse "Fahrzeuge" ist der F4 höchstens ein Bobbycar.
>
> Nein, da ein Microcontroller weit über dem Niveau eines Spielzeugs
> liegt.
>
>> Wenn man Performance braucht,


Sachen, wie sie hier genannt wurden (MP3, Audio Signal processing etc) 
macht ein richtiger Prozessor mit Betriebssystem besser.

Warum?
Weil man auf einem F4 alles in Firmware lösen muss. Auf einem richtigen 
System verwendet man dazu fertige Softwarepakete oder kann auf Libraries 
zurückgreifen. Man kann verbreitete Schnittstellen verwenden, ohne viel 
Implementierungsaufwand.
Man hat ordentlich Speicher (GB stat kB) für Daten und auch die 
Leistung, damit etwas vernünftiges anzustellen.
Man tut sich um Häuser leichter, Daten über Netzwerk oder auf 
Filesysteme zu speichern. Das ist dazu auch noch viel schneller.
Es ist flexibler, weil man leichter Softwaremodule nachladen kann.

Das macht den F4 jetzt weder überflüssig, noch schlecht. Er ist halt nur 
nicht für den Bereich gedacht, das ist alles.

Aber mit Verlaub:
Bei der FPU des F4 von "toller Leistung" zu spechen ist Käse, sorry. 
Überle dir mal, wieviele F4 nötig wären, um einem handelsüblichem PC an 
Leistung gleichzukommen. Und dann überlege, was die kosten, und was das 
Strom braucht.

von Jobst M. (jobstens-de)


Lesenswert?

Mmhm schrieb:
> Auf einem richtigen
> System verwendet man dazu fertige Softwarepakete oder kann auf Libraries
> zurückgreifen.

Was für ein Blödsinn. Deine Aussagen zeugen von absoluter Unkenntnis. Es 
gibt auch für Controller in C so viele fertige Softwarepakete / Libs, 
die man nur noch zusammen stöpseln muss um das zu erledigen. Das ist 
überhaupt der Grund, warum die meisten das hier schaffen.

Gruß
Jobst

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Mmhm schrieb:
> Auf einem richtigen
> System verwendet man dazu fertige Softwarepakete oder kann auf Libraries
> zurückgreifen.

Das kann man ohne OS auch ... Zuletzt hatte ich spaßeshalber die 
libsidplay (im Prinzip ein (fast)kompletter C64-Emulator) von Linux ohne 
große Mühen für den ARM kompiliert und der hat funktioniert ... Und das 
ohne OS^^

Das einzige wo ich dir Recht geben müsste: Verwendet man ein OS wie 
Linux, dann hat man eine MMU und damit eine vernünftige 
Speicherverwaltung ...

Das fehlt mir leider ... Ein haufen new und delete würden ratzefatz den 
Speicher fragmentieren und ihn auffressen.

von Äpfel und Birnen (Gast)


Lesenswert?

>Überlege dir mal, wieviele F4 nötig wären,
>um einem handelsüblichem PC an Leistung gleichzukommen.
Und wie viele PCs braucht man, um so viele SPI und I2C Schnittstellen
zu haben wie an einem F4 ?

>Verwendet man ein OS wie Linux, dann hat man eine MMU
>und damit eine vernünftige Speicherverwaltung ...
War das nicht umgekehrt, man muss eine MMU haben,
damit Linux überhaupt läuft ?

>in C so viele fertige Softwarepakete / Libs
aha, ist keine Frage der Hardware, sondern der Software

>(MP3, Audio Signal processing etc) macht ein richtiger Prozessor
>mit Betriebssystem besser.
also MP3 Player mit Windows 10 und DVD/BluRay Player mit Linux ??
Warum ist da noch keiner drauf gekommen ?

Oder ist der Kern der etwas abgeglittenen Diskussion, das kann ICH 
besser
auf einem uC/PC, und nicht, der uC/PC ist besser ?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Äpfel und Birnen schrieb:
>>Verwendet man ein OS wie Linux, dann hat man eine MMU
>>und damit eine vernünftige Speicherverwaltung ...
> War das nicht umgekehrt, man muss eine MMU haben,
> damit Linux überhaupt läuft ?

Exactly ... Trotzdem ist meine Aussage richtig (wenn man die 
ucLinux-Abart nicht betrachtet) ... Verwendet man ein OS wie Linux, dann 
hat man eine MMU und damit eine vernünftige Speicherverwaltung :)

von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Mampf F. schrieb:
>
> Das einzige wo ich dir Recht geben müsste: Verwendet man ein OS wie
> Linux, dann hat man eine MMU und damit eine vernünftige
> Speicherverwaltung ...
>

Mit solchen Aussagen wäre ich etwas vorsichtig. Der Hauptanwendungszweck 
von MMUs besteht darin, Speicherbereiche hardwareunterstützt logisch 
gegeneinander abzugrenzen, so dass fehlerhafte Speicherzugriffe eines 
Prozesses andere Prozesse nicht in Mitleidenschaft zieht. Jedenfalls 
nützen alle OS, die MMUs unterstützen bzw. voraussetzen, die MMUs für 
diese Anwendung.

Das ist genau dann sinnvoll, wenn die Prozesse so unabhängig voneinander 
sind, dass ein Problem in einem Prozess diesen zwar lahmlegt, die 
anderen Prozesse aber trotzdem weiterarbeiten können, z.B: 
Mehrbenutzersysteme.

Das ist in Embedded aber in der Regel nicht der Fall, weil alle Prozesse 
(dort normalerweise tasks genannt) als Ganzes zusammen arbeiten müssen. 
Wenn also z.B. in einem Zutrittskontrollsystem die Buchungstask "Mist 
baut," dafür aber die Ausweis- und Kommunikationstasks weiter laufen 
(weil eine MMU die Speicherbereiche gegeneinander abgrenzt), läuft das 
System als Ganzes trotzdem nicht richtig. Man könnte sogar 
argumentieren, dass in solchen Fällen eine MMU problematischer ist, weil 
das Gesamtsystem damit wahrscheinlicher in einen semistabilen Zustand 
gerät (also einen, bei dem das Fehlverhalten nicht erkannt und damit 
korrigiert werden kann). Semistabile Zustände sind in Embedded Systemen 
weitaus unangenehmer als Zustände, für die es Korrekturmöglichkeiten 
gibt (wenn auch wie bei Watchdogs mit dem Holzhammer).

> Das fehlt mir leider ... Ein haufen new und delete würden ratzefatz den
> Speicher fragmentieren und ihn auffressen.

Pls explain. Warum hilft eine MMU gegen Speicherfragmentierung?

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Mmhm schrieb:
> Aber mit Verlaub:
> Bei der FPU des F4 von "toller Leistung" zu spechen ist Käse, sorry.
> Überle dir mal, wieviele F4 nötig wären, um einem handelsüblichem PC an
> Leistung gleichzukommen. Und dann überlege, was die kosten, und was das
> Strom braucht.

Wenn ich einen F4 nehme, dann habe ich in einem Chip von 15x15mm alles, 
was ich brauche, zusammen um sehr viele Aufgaben zu erledigen. Und das 
bei einer Leistungsaufnahme, bei der beim PC vermutlich noch nicht 
einmal der Netzteillüfter anläuft :-}

Davon ab:
Wie groß war nochmal ein PC?
Wie lange braucht er nach dem Einschalten, damit ich überhaupt mit ihm 
arbeiten kann?
Was ist mit harter, schneller Echtzeit?

Es ist ziemlich absurd, Äpfel mit Birnen zu vergleichen.

Und: wer mit 8039 und 6502 angefangen hat, für den ist es schon 
beeindruckend, was diese kleinen Dinger heute alles können.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Äpfel und Birnen schrieb:
> War das nicht umgekehrt, man muss eine MMU haben,
> damit Linux überhaupt läuft ?

Nö.
https://www.mikrocontroller.net/articles/Linux_auf_STM32

: Bearbeitet durch User
von Mmhm (Gast)


Lesenswert?

Äpfel und Birnen schrieb:
>>Überlege dir mal, wieviele F4 nötig wären,
>>um einem handelsüblichem PC an Leistung gleichzukommen.
> Und wie viele PCs braucht man, um so viele SPI und I2C Schnittstellen
> zu haben wie an einem F4 ?

Vielleicht jetzt nicht bei einem handelsüblichen PC. Was aber 
Prozessoren angeht:
Einen einzigen. Auch die üblichen Prozessoren haben SPI, I2C, UART und 
so weiter und so fort. Schneller und in größerer Zahl als auf einem µC. 
Noch nie hatte ich soviele freie Schnittstellen übrig, als bei meiner 
ersten i.MX6-Platine.

Besser noch: Man will eine RTCC an I2C ansprechen? Ein Klax, verglichen 
mit dem STM32. Das ist ein einziger Eintrag in den Devicetree. Den Rest 
erledigt der Linux-Treiber.

UART? Kein Problem. Macht der Linux-Treiber. Dito SPI.

Dazu kommt, die Dinger haben Schnittstellen, die der STM32 nicht hat. 
SD-Karte mit DDR und >100MHz? Kann kein einziger STM32. EMMC? 
PCI-Express? SATA? MIPI?...

Ein Blick über den Tellerrand könnte nicht schaden.

von Mampf unterwegs (Gast)


Lesenswert?

Ruediger A. schrieb:
> Pls explain. Warum hilft eine MMU gegen Speicherfragmentierung?

Da kanb ich leider nur auf die erfagrungen mit x86 zurück greifen... 
Virtueller speicher ist das stichwort... Physische 4k blöcke können von 
der speicherverwaltung so umgemappt werden, dass er für einen prozess 
linear aussieht, obwohl er es nicht ist.

Hat man nur physischen speicher müsste man ständig alles umkopieren, 
damit neuer zusammenhängender speicher frei wird, den man wieder 
allozieren kann... Jedes free oder delete sorgt für eine größere 
fragmentierung, die man nicht so einfach beheben kann.

von Mmhm (Gast)


Lesenswert?

Mampf unterwegs schrieb:
> Hat man nur physischen speicher müsste man ständig alles umkopieren,
> damit neuer zusammenhängender speicher frei wird, den man wieder
> allozieren kann... Jedes free oder delete sorgt für eine größere
> fragmentierung, die man nicht so einfach beheben kann.

Das was du beschreibst, ist eine Eigenschaft des Betriebssystems.
Das hat mit einer MMU nichts zu tun.

Eine MMU kümmer sich um die korrekte Ansteuerung der RAM-Bausteine und 
Refresh und diesen Impedanzkram, und all die anderen lästigen Dinge die 
DRAMs so mit sich bringen. Sie blendet den furchtbar umständlich zu 
verwendenden DRAM als simpler adressierbaren Bereich ein. Was der 
Prozessor damit tut, ist der MMU egal.

Um die Allzierung von Blöcken da drin kümmert sich beim PC oder einem 
Prozessorsystem das OS.

Dort wird fragmentiert, wenn das nicht sauber gelöst ist.

µCs ohne OS haben damit sowieso so ihre Probleme. Ja, man kann einen 
Heap deklarieren und malloc verwendet. Da sollte man aber sehr sauber 
arbeiten.

Noch ein Argument für Linux :-)

von Karl (Gast)


Lesenswert?

Mmhm schrieb:
> Eine MMU kümmer sich um die korrekte Ansteuerung der RAM-Bausteine und
> Refresh und diesen Impedanzkram, und all die anderen lästigen Dinge die
> DRAMs so mit sich bringen. Sie blendet den furchtbar umständlich zu
> verwendenden DRAM als simpler adressierbaren Bereich ein. Was der
> Prozessor damit tut, ist der MMU egal.

Facepalm

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Mmhm schrieb:
> Das was du beschreibst, ist eine Eigenschaft des Betriebssystems.
> Das hat mit einer MMU nichts zu tun.

Ähm, jein ... Ja, die Speicherverwaltung macht das OS ... Aber der 
"Virtual Memory" muss von der Hardware unterstützt sein. Das hangeln 
durch den TLB zB wäre softwaremäßig ein unzumutbarer Overhead ...

Hier TLB:
https://en.wikipedia.org/wiki/Translation_lookaside_buffer

Hier MMU:
https://en.wikipedia.org/wiki/Memory_management_unit

Das Prinzip ist quasi gleich ... Von der VAX bis zum ARM gibt es nicht 
wesentliche Unterschiede.

Um es nochmal auf den Punkt zu kriegen ... Auch mit MMU fragmentiert der 
physische Speicher, was aber nicht wirklich relevant ist, weil er durch 
die Virtuellen Adresse wieder linearisiert wird^^

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Mmhm schrieb:
> Eine MMU kümmer sich um die korrekte Ansteuerung der RAM-Bausteine und
> Refresh und diesen Impedanzkram, und all die anderen lästigen Dinge die
> DRAMs so mit sich bringen. Sie blendet den furchtbar umständlich zu
> verwendenden DRAM als simpler adressierbaren Bereich ein. Was der
> Prozessor damit tut, ist der MMU egal.

Die Erklärung könnte aus Löwenzahn sein ... Fachlich nicht korrekt, aber 
nicht ganz falsch ;-)

Damals zu C64 Zeiten war eine MMU tatsächlich sowas ... ^^

von RAc (Gast)


Lesenswert?

Mmhm schrieb:
> Mampf unterwegs schrieb:
>> Hat man nur physischen speicher müsste man ständig alles umkopieren,
>> damit neuer zusammenhängender speicher frei wird, den man wieder
>> allozieren kann... Jedes free oder delete sorgt für eine größere
>> fragmentierung, die man nicht so einfach beheben kann.
>
> Das was du beschreibst, ist eine Eigenschaft des Betriebssystems.
> Das hat mit einer MMU nichts zu tun.
>
> Eine MMU kümmer sich um die korrekte Ansteuerung der RAM-Bausteine und
> Refresh und diesen Impedanzkram, und all die anderen lästigen Dinge die
> DRAMs so mit sich bringen. Sie blendet den furchtbar umständlich zu
> verwendenden DRAM als simpler adressierbaren Bereich ein. Was der
> Prozessor damit tut, ist der MMU egal.
>

Genau. Was "Mampf" vermutlich MEINT, ist dass eine MMU den Working Set 
(also den tatsächlich gebrauchten Speicher) komprimieren kann (wobei er 
aber munter applikationsseitige Fragmentierung und OS seitiges 
Management in einen Topf wirft). Das geht aber nur dann, wenn die 
Applikation nur auf sehr wenige Blöcke des virtuellen Speichers faktisch 
zugreift. Der Swappingalgorithmus des OS kann dann den working set durch 
LRU etc. auf diese aktiven Seiten reduzieren. Das ist aber 1. für die 
Applikation komplett transparent, und 2. nur unter der Voraussetzung des 
kleinen Working sets ein Vorteil. Wenn die Prozesse ihren Speicher 
tatsächlich alle benutzen, dreht sich das Ganze ins Gegenteil um, und 
das OS swappt sich zu Tode.

> Um die Allzierung von Blöcken da drin kümmert sich beim PC oder einem
> Prozessorsystem das OS.
>
> Dort wird fragmentiert, wenn das nicht sauber gelöst ist.
>

Nein nein, die Fragmentierung ist einzig und Allein ein Problem der 
Applikation in ihrem virtuellen Adressbereich.

Das Einzige hier zulässige Argument besteht darin, dass ein von Allen 
Prozessen geteilter Heap tendentiell eher fragmentiert wird als lokale 
Heaps (auch nicht immer, aber im Grossen und Ganzen stimmt das Argument 
schon). Für solche Sachen gibt es aber Heap Pools.

> µCs ohne OS haben damit sowieso so ihre Probleme. Ja, man kann einen
> Heap deklarieren und malloc verwendet. Da sollte man aber sehr sauber
> arbeiten.
>
> Noch ein Argument für Linux :-)

Nein, eher dagegen. Magst Du mal auf mein vorher angeführtes Argument 
bzgl. der starken Verzahnung der Tasks in einem Embedded System 
eingehen? Es ist z.B. in Embedded sehr häufig der Fall, dass Speicher 
von einer task angefordert, aber von einer Anderen task verarbeitet und 
wieder befreit wird. Man kann das als schlechtes Design ansehen, muss 
dann aber eine bessere Variante anbringen.

Linux etc. sind halt dafür gedacht, dass unabhängig voneinander 
agierende tasks gegeneinander geschützt sind. Das macht auch Sinn, denn 
ich will NICHT, dass ein schlecht geschriebenes Mailfrontend mir auch 
noch meinen Texteditor zerschiesst, wenn es stirbt. Das ist aber eine 
völlig andere Problemstellung als ein autarkes Embedded System, indem 
alle Komponenten miteinander agieren müssen!

von tzhgfhgrhzfghz6453454353453534534533453453 (Gast)


Lesenswert?

Mmhm schrieb:
> Besser noch: Man will eine RTCC an I2C ansprechen? Ein Klax, verglichen
> mit dem STM32. Das ist ein einziger Eintrag in den Devicetree. Den Rest
> erledigt der Linux-Treiber.
>
> UART? Kein Problem. Macht der Linux-Treiber. Dito SPI.

das setzt vorraus das du einen prozessor nutzt wo sich jemand  schon die 
mühe gemacht hat und ein passendes BSP geschrieben und dafür passende 
peripherietreiber vorliegen

schnapp dir mal einen china Cortex A8/A9 ... ^^
wenn du glück hast funktioniert das linux und kann sogar ein terminal



wenn man dieses SW konstrukt so vorbereitet ...
läuft das auch 0815 mit einem STM, ATMEL , NXP .... blah

wenn man zB STMcube nutzt gibts RTOS , LwIP , TLS und FAT fix und foxi
ebenso diverse  USB device und Hostbeispiele
10x klicken und das läuft vom prinzip erstmal


Mmhm schrieb:
> EMMC?
> PCI-Express? SATA? MIPI?...

sind das schnittstellen die man auf kleinst embedded systemen brauch?



wichtig ist hierbei immernoch ... die Anwendung!!
wenn ich ein 10" TFT mit multitouch fullHD und H264 videos betreiben 
will kommt KEIN halbwegs inteligenter Mensch auf die idee einen 8bit 
ATMEL oder sogar einen M4/M7 zu nehmen.


ich lasse einen M7 mit HTTP(s) + VoIP + Video laufen ...
macht er , gut sogar




Mmhm schrieb:
> Eine MMU kümmer sich um die korrekte Ansteuerung der RAM-Bausteine und
> Refresh und diesen Impedanzkram, und all die anderen lästigen Dinge die
> DRAMs so mit sich bringen. Sie blendet den furchtbar umständlich zu
> verwendenden DRAM als simpler adressierbaren Bereich ein. Was der
> Prozessor damit tut, ist der MMU egal.

das mit dem RAM macht NICHT die MMU ...
https://de.wikipedia.org/wiki/Memory_Management_Unit

von S. R. (svenska)


Lesenswert?

Mmhm schrieb:
> Eine MMU kümmer sich um die korrekte Ansteuerung der RAM-Bausteine und
> Refresh und diesen Impedanzkram, und all die anderen lästigen Dinge die
> DRAMs so mit sich bringen.

Du verwechselst "Memory Controller" und "Memory Management Unit".

von Markus (Gast)


Lesenswert?

Linux auf dem STM32F746 Discovery
http://www.emcraft.com/products/503

Hat das eigentlich ne MMU?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Markus schrieb:
> Hat das eigentlich ne MMU?

Glaub nicht, das ist ucLinux ...

Mittlerweile wird das STM32F429 Discovery Board sogar vom 
Main-Line-Kernel unterstützt!

Theoretisch sollte das sogar auf meinem DIY-Board laufen ... Hatte extra 
obacht gegeben, dass das Ding dann Linux-kompatibel ist 
(=STM32F429-Discovery-kompatibel).

Also kein Grund mehr, ein extra ucLinux sich zu besorgen, das seit 
Jahren nicht mehr gepflegt wurde.

: Bearbeitet durch User
von HÄ??? (Gast)


Lesenswert?

Mampf F. schrieb:
> Markus schrieb:
>> Hat das eigentlich ne MMU?
>
> Glaub nicht, das ist ucLinux ...
>
> Mittlerweile wird das STM32F429 Discovery Board sogar vom
> Main-Line-Kernel unterstützt!
>

Quelle?

Die M Cores haben per Definition keine MMU, aber Mainstream Linux setzt 
zwingend eine MMU voraus???

von BMR (Gast)


Lesenswert?


von Samuel J. (capstrovor)


Lesenswert?

Ich muss mich hier kurz einklinken.

Was soll diese ganze Diskussion eigentlich?
Hier wird doch jetzt nicht wirklich von einigen Leuten diskutiert, ob 
eine CPU AUS EINEM PERSONAL COMPUTER bessere, schnellere und mehr 
Schnittstellen als ein ARM Cortex M4 hat???? Und dann noch das Argument 
bringen dass man viel teurer käme, wenn man so viele M4s kauft damit man 
auf die gleiche Leistung/Rechenpower kommt wie mit einer CPU.

Ha! Mein Ferari ist viel schneller als dein Polo, und du bräuchtest 
mindestens 10 Stück von denen, damit du die gleiche Leistung hast wie 
ich... Das wäre ja viel teurer.... Du Idiot.

Ihr solltet lieber über die Sinnhaftigkeit dieser Diskussion 
diskutieren.

von Markus (Gast)


Lesenswert?

>Bare Metal Raspi:
>https://github.com/rsta2/circle

Das Ding scheint super. So was suche ich schon länger.
Könnte man glatt einen Arduino draus machen.

von S. R. (svenska)


Lesenswert?

HÄ??? schrieb:
> Die M Cores haben per Definition keine MMU, aber Mainstream Linux setzt
> zwingend eine MMU voraus???

Das war mal so. Während Linux eine MMU voraussetzt, unterstützte ucLinux 
MMU-lose Systeme. Inzwischen ist diese Unterstützung als "CONFIG_MMU=n" 
in den Mainline-Kernel gewandert.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Ein haufen new und delete würden ratzefatz den Speicher fragmentieren
> und ihn auffressen.

Eine unsinnige Mär, die sich aber offensichtlich sehr hartnäckig hält.

Gegenbeispiel: new/delete mit stets gleicher Objektgröße erzeugen
gar keine Fragmentierung, da die freigegebenen Bereiche immer sofort
wiederbenutzbar sind.

Zwischen diesem Fall und dem pathologischen Fall, dass jede Allozierung
so komplett anders ist, dass sie nicht von zuvor freigegebenen Stücken
abgedeckt werden kann, sind alle Varianten möglich; das hängt einfach
vom Anforderungsmuster der Anwendung ab.  Ist das Anwendungsmuster
hinreichend gut statistisch verteilt, dann kannst du davon ausgehen,
dass sich das System auf Dauer auf einem bestimmten Maß an
Speichernutzung „einschwingt“.

Eine Applikation mit dynamischem Datenanfall (nur dort haben solche
Sachen ja auch wirklich Sinn) muss natürlich immer mit dem Zustand
irgendwie umgehen können, dass mehr Anforderung aufkommt, als an
Ressourcen zur Verfügung stehen, und muss dann in ihrem Rahmen sinnvoll
reagieren können.  Dabei ist es völlig unerheblich, wie der Speicher
nun aufgeteilt wird: ein festes, zur Compilezeit vorgegebenes Array
für die Daten kann genauso gut nicht ausreichen wie der Speicher bei
new/delete zu sehr fragmentiert sein kann, um die Anforderung zu
erfüllen.

Dass das alles mit einer MMU nur sehr bedingt was zu tun hat, haben
ja andere schon geschrieben.  Diese verwaltet den Speicher in so großen
Blöcken, dass das allein keinen Algorithmus ähnlich malloc() ersetzen
kann (nur ergänzen).

: Bearbeitet durch Moderator
von (prx) A. K. (prx)


Lesenswert?

Mampf F. schrieb:
> Ähm, jein ... Ja, die Speicherverwaltung macht das OS ... Aber der
> "Virtual Memory" muss von der Hardware unterstützt sein. Das hangeln
> durch den TLB zB wäre softwaremäßig ein unzumutbarer Overhead ...

In der Anfangsphase der RISC Prozessoren gab es welche, die den Table 
Walk in Software durchführten. Nur der TLB war in Hardware vorhanden, 
gefüllt wurde er per Software.

> Das Prinzip ist quasi gleich ... Von der VAX bis zum ARM gibt es nicht
> wesentliche Unterschiede.

Bei Segmentierung statt Paging schon, wie bei i286 oder Z8000.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Mampf F. schrieb:
>> Ein haufen new und delete würden ratzefatz den Speicher fragmentieren
>> und ihn auffressen.
>
> Eine unsinnige Mär, die sich aber offensichtlich sehr hartnäckig hält.
>
> Gegenbeispiel: new/delete mit stets gleicher Objektgröße erzeugen
> gar keine Fragmentierung, da die freigegebenen Bereiche immer sofort
> wiederbenutzbar sind.

Das setzt voraus, dass du eine Funktion implementiert hast, die 
Speicherbereiche nach einem free/delete wiederverwendet ...

Im Rahmen eines OS ist das eine Selbstverständlichkeit ... Aber 
bare-metal?

Die "Standard"-Implementierungen von _sbrk machen das alle nicht ...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Das setzt voraus, dass du eine Funktion implementiert hast, die
> Speicherbereiche nach einem free/delete wiederverwendet ...

Habe ich: für die avr-libc.

> Im Rahmen eines OS ist das eine Selbstverständlichkeit ... Aber
> bare-metal?

s.o.

> Die "Standard"-Implementierungen von _sbrk machen das alle nicht ...

Ist ja auch nicht die Aufgabe von sbrk(), sondern von malloc().
sbrk() wird von diesem nur gerufen, wenn es einen neuen Speicherblock
vom Betriebssystem braucht.  Der Rest war und ist ohnehin eine
Angelegenheit der Bibliothek, egal, ob du da nun Linux oder was anderes
hast.

Klar könnte man mit sbrk() auch Speicher zurückgeben, aber das ist
für die Fragmentierung erstmal eher unerheblich.  Bei bare metal spielt
das sowieso keine so große Geige, denn der damit freigegebene Speicher
kann von niemandem anders genutzt werden.  (Dafür bräuchte es mehrere
Prozesse oder zumindest Threads.)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Bei bare metal spielt das sowieso keine so große Geige, denn der damit
> freigegebene Speicher kann von niemandem anders genutzt werden.

Ergänzung: der Stack kann ihn natürlich nutzen.  Bei fehlender MMU
macht er das aber sowieso, ganz ungefragt, egal ob sbrk() ihn nun
„offiziell“ freigegeben hat oder nicht. ;-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

S. R. schrieb:
> Das war mal so. Während Linux eine MMU voraussetzt, unterstützte ucLinux
> MMU-lose Systeme. Inzwischen ist diese Unterstützung als "CONFIG_MMU=n"
> in den Mainline-Kernel gewandert.
...und wird weiterhin von den Jungs gepflegt, die damals uCLinux 
entwickelt haben, in der Hauptsache Geert Uytterhoeven und Greg Ungerer. 
Nur Arcturus ist ziemlich raus.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

tzhgfhgrhzfghz6453454353453534534533453453 schrieb:
> schnapp dir mal einen china Cortex A8/A9 ... ^^ wenn du glück hast
> funktioniert das linux und kann sogar ein terminal

Womit werden die denn üblicherweise genutzt, wenn nicht mit Linux? Sind 
alle Treiber für Windows CE?

Die eigentliche Frage ist hier ja, ob es sich überhaupt lohnt sich noch 
mit Mikrocontroller und Low-Level Programmierung auseinander zu setzen, 
wenn die Cortex-A alles besser können und man mit Linux auch alles 
erreichen kann (insb. Echtzeit Fähigkeit).

von Bernd K. (prof7bit)


Lesenswert?

RAc schrieb:
> Es ist z.B. in Embedded sehr häufig der Fall, dass Speicher
> von einer task angefordert, aber von einer Anderen task verarbeitet und
> wieder befreit wird.
> [...]
> Linux etc. sind halt dafür gedacht, dass unabhängig voneinander
> agierende tasks gegeneinander geschützt sind.

Das was Du bei Embedded als "Tasks" beieichnest wäre unter Linux mehrere 
Threads eines einzigen Prozesses.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Dr. Sommer schrieb:
> Die eigentliche Frage ist hier ja, ob es sich überhaupt lohnt sich noch
> mit Mikrocontroller und Low-Level Programmierung auseinander zu setzen,
> wenn die Cortex-A alles besser können und man mit Linux auch alles
> erreichen kann (insb. Echtzeit Fähigkeit).

Booten in 20ms (z.B. nach WD-Reset)?

Speicherverbrauch?

Lizenz?

Und zur Echtzeitfähigkeit: für viele Anwendungen sind RTAI, RTLinux etc. 
mit ihren Taskwechseln bzw. Durchstechen von Interruptanfragen einfach 
viel zu langsam.

Um nur einige Gründe zu nennen :-)

von Hans im Glück (Gast)


Lesenswert?

Chris D. schrieb:
> Booten in 20ms (z.B. nach WD-Reset)?
Eigentlich erstaunlich, dass es dafür noch keine Lösung gibt, so ala 
"fixes Layout in den RAM kopieren, Peripherie initialisieren und läuft".
> Speicherverbrauch?
Ist ja nicht mehr das große Problem bei den großen Cortex-A mit 
DDR-Speichercontroller.
> Lizenz?
Linux wird doch in vielen Closed-Source-Anwendungen genutzt...
> Und zur Echtzeitfähigkeit: für viele Anwendungen sind RTAI, RTLinux etc.
> mit ihren Taskwechseln bzw. Durchstechen von Interruptanfragen einfach
> viel zu langsam.
Nagut, immerhin ist man als uC-Experte noch nicht ganz abgeschafft ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Chris D. schrieb:
> Lizenz?

Gibt ja noch mehr als Linux. ;-)

Aber ich bin da ansonsten voll auf deiner (Argumentations-)Seite.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Hans im Glück schrieb:
> Chris D. schrieb:
>> Booten in 20ms (z.B. nach WD-Reset)?
> Eigentlich erstaunlich, dass es dafür noch keine Lösung gibt, so ala
> "fixes Layout in den RAM kopieren, Peripherie initialisieren und läuft".

Ja, das wundert mich auch - sollte eigentlich recht einfach realisierbar 
sein.

>> Speicherverbrauch?
> Ist ja nicht mehr das große Problem bei den großen Cortex-A mit
> DDR-Speichercontroller.

Ja, aber wenn es bspw. zuverlässig und energiesparend sein soll, dann 
ist jeder externe Chip zu viel. Und wenn es dann in die Stückzahl geht, 
wird auch der Preis für Speicher interessant.

>> Lizenz?
> Linux wird doch in vielen Closed-Source-Anwendungen genutzt...

Ja, wobei das im Zweifelsfall eben auch nach hinten losgehen kann, wenn 
bspw. im Kernel Anpassungen vorgenommen werden müssen.

>> Und zur Echtzeitfähigkeit: für viele Anwendungen sind RTAI, RTLinux etc.
>> mit ihren Taskwechseln bzw. Durchstechen von Interruptanfragen einfach
>> viel zu langsam.
> Nagut, immerhin ist man als uC-Experte noch nicht ganz abgeschafft ;-)

;-)

von S. R. (svenska)


Lesenswert?

Hans im Glück schrieb:
>> Booten in 20ms (z.B. nach WD-Reset)?
> Eigentlich erstaunlich, dass es dafür noch keine Lösung gibt, so ala
> "fixes Layout in den RAM kopieren, Peripherie initialisieren und läuft".

Wäre ein Problem für ASLR.

von Dr. Sommer (Gast)


Lesenswert?

In dem Kontext fällt mir noch was ein:

Bernd K. schrieb:
> Das was Du bei Embedded als "Tasks" beieichnest wäre unter Linux mehrere
> Threads eines einzigen Prozesses.

Warum eigentlich wird (im Kontext Linux/RTOS) so oft von Tasks/Threads 
geredet (und damit vermutlich auch gearbeitet)? Der Fall, dass man 
tatsächlich mehrere Rechenleistungs-Hungrige Aufgaben hat, ist doch im 
Embedded Bereich eher selten. Warum sich da die Mühe mit der 
Synchronisation mehrerer Threads machen, wenn man auch alle Ereignisse 
schön sequentiell abarbeiten könnte?

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

S. R. schrieb:
> Hans im Glück schrieb:
>>> Booten in 20ms (z.B. nach WD-Reset)?
>> Eigentlich erstaunlich, dass es dafür noch keine Lösung gibt, so ala
>> "fixes Layout in den RAM kopieren, Peripherie initialisieren und läuft".
>
> Wäre ein Problem für ASLR.

Was einen zum nächsten Grund bringt, Linux (oder FreeBSD ;-) nicht zu 
verwenden: mit der Größe des Codes steigt einfach auch die 
Angreifbarkeit/Fehleranfälligkeit.

von Stefan (Gast)


Lesenswert?

Chris D. schrieb:
> Ja, das wundert mich auch - sollte eigentlich recht einfach realisierbar
> sein

Ein komplettes Linux System in den hybernate Modus legen ist nicht ohne, 
Timesys hat es geschafft  zuerst auf dem sama5
Man kann.sich die boot Performance auf youtube anschauen einfach nach 
timesys sama5 fastboot suchen

Übrigens die sama5 lassen sich super einfach zb in iar programmieren, 
auf der embedded wurde für juli ein SIP angekündigt der sogar ein 1Gbit 
Speicher im Package haben soll, damit wird auch das layout auf eine 
4Layer pcb passen. Nur noch Flash Speicher soviel man will anschliessen 
und fertig, man hat eine neue Dimension an Performance sogar gegenüber 
einem same70 mit.300mhz.

von RAc (Gast)


Lesenswert?

Dr. Sommer schrieb:
> In dem Kontext fällt mir noch was ein:
>
> Bernd K. schrieb:
>> Das was Du bei Embedded als "Tasks" beieichnest wäre unter Linux mehrere
>> Threads eines einzigen Prozesses.
>
> Warum eigentlich wird (im Kontext Linux/RTOS) so oft von Tasks/Threads
> geredet (und damit vermutlich auch gearbeitet)? Der Fall, dass man
> tatsächlich mehrere Rechenleistungs-Hungrige Aufgaben hat, ist doch im
> Embedded Bereich eher selten. Warum sich da die Mühe mit der
> Synchronisation mehrerer Threads machen, wenn man auch alle Ereignisse
> schön sequentiell abarbeiten könnte?

Es geht dabei nicht um die Rechenleistungshungrigkeit, sondern um die 
logische Trennung von nebenläufigen Tätigkeiten. Ich bin z.B. u.A. in 
der Zutrittskontrolle tätig und habe schon die Firmware für etliche 
Kartenleser entwickelt. Hier sind typischerweise folgende Aufgaben zu 
lösen:

1. Hostkommunikation (typischerweise über ein serielles Interface)
2. Karteninteraktion
3. Peripheriesteuerung (On Board LEDs, Relais etc)

Sieht recht trivial aus, ist aber u.A. im hohen Masse asynchron. Glaub 
mir, zu versuchen all das in einer grossen Message Pump in main() zu 
lösen führt im Handumdrehen zu nicht mehr les- oder wartbarem Code. Hier 
tut man sich mit einem RTOS, das z.B. Intertaskkommunikation sowie 
ISR/Applikationskommunikation für Dich erledigt, um so viel leichter.

Was nicht heissen soll, dass es nicht auch noch einen Platz für OS-lose 
Systeme gibt. Wo z.B. eine ziemlich pufferfreie 1:1 Pumpe zwischen 
Messfühlerdaten und einem Hostkomminterface zu realisieren ist, reicht 
eine  ereignisgesteuerte main() message pump in der Regel aus. 
Allerdings wird es  dort auch schon päp, wenn die Umlaufzeiten nicht 
genau synchron sind (also z.B. die Bestätigung seitens der 
Hostkommunikation mal so verzögert sein kann, dass zwischen zwei 
Kommunikationszyklen mehrere Messwerte anfallen, die gepuffert werden 
müssen). In Anbetracht der Tatsache, dass kleine RTOS sehr sehr wenig 
footprint- und Latenzkosten verursachen, kann man schon auf M0+ cores 
mit 128k Flash und 32K RAM komplette Leserfirmware einschliesslich RTOS 
implementieren.

Ich diskutiere die Frage übrigens auch in meinem Buch (flöt träller).

von Dr. Sommer (Gast)


Lesenswert?

RAc schrieb:
> zu versuchen all das in einer grossen Message Pump in main() zu
> lösen führt im Handumdrehen zu nicht mehr les- oder wartbarem Code.

Das ist ja nicht die einzige Möglichkeit... Man kann die einzelnen 
Aufgaben ja z.B. in eigene Klassen schreiben, denen Member-Funktionen 
für die einzelnen Ereignisse verpassen, und diese von den Interrupts aus 
aufrufen. Die Klassen können dann untereinander Funktionen aufrufen und 
jeweils einen Completion-Handler übergeben (bzw. Observer-Pattern), der 
dann bei asynchroner Fertigstellung aufgerufen wird. So ist alles sauber 
getrennt und man braucht keine Threads und -Synchronisation.

von RAc (Gast)


Lesenswert?

Bernd K. schrieb:
> RAc schrieb:
>> Es ist z.B. in Embedded sehr häufig der Fall, dass Speicher
>> von einer task angefordert, aber von einer Anderen task verarbeitet und
>> wieder befreit wird.
>> [...]
>> Linux etc. sind halt dafür gedacht, dass unabhängig voneinander
>> agierende tasks gegeneinander geschützt sind.
>
> Das was Du bei Embedded als "Tasks" beieichnest wäre unter Linux mehrere
> Threads eines einzigen Prozesses.

Richtig, aber der Auslöser war ja die Bemerkung, dass MMU und virtuelle 
Speicherbereiche einen Vorteil bei der Speicherverwaltung und 
Fragmentierungsproblemen bringen würden. Aber da ja virtuelle 
Speicherbereiche nur zwischen "echten" Prozessen realisiert sind, hatte 
ich den Faden einfach mal weitergesponnen.

Rein logisch hast Du natürlich vollkommen recht; eine typische Embedded 
FW ist konzeptuell so wie eine Linux Applikation mit mehreren threads. 
Ich warte noch auf ein Embedded Linux, das das gesamte System auf eine 
einzige Applikation zusammenstreicht (in der dann natürlich mehrere 
threads erzeugt werden können). Damit würden footprint und Bootzeiten 
enorm reduziert werden... ;-)

von RAc (Gast)


Lesenswert?

Dr. Sommer schrieb:
> RAc schrieb:
>> zu versuchen all das in einer grossen Message Pump in main() zu
>> lösen führt im Handumdrehen zu nicht mehr les- oder wartbarem Code.
>
> Das ist ja nicht die einzige Möglichkeit... Man kann die einzelnen
> Aufgaben ja z.B. in eigene Klassen schreiben, denen Member-Funktionen
> für die einzelnen Ereignisse verpassen, und diese von den Interrupts aus
> aufrufen. Die Klassen können dann untereinander Funktionen aufrufen und
> jeweils einen Completion-Handler übergeben (bzw. Observer-Pattern), der
> dann bei asynchroner Fertigstellung aufgerufen wird.

Ist ein interessanter Ansatz, müsste ich mir mal genauer ansehen, Danke. 
Allerdings stösst Du m.M. nach damit dann an Grenzen, wenn Ereignisse 
dazu kommen, die nicht mehr direkt von der HW aus gesteuert werden (wie 
würdest Du damit z.B. "Hintergrundtasks" abhandeln, die Messwerte von 
mehreren Fühlern aufbereiten und verknüpfen, bevor sie an die 
Kommunikation weitergereicht werden? Vor Allem wenn mehrere solcher 
Aktivitäten nebenläufig abgehandelt werden müssen, vielleicht sogar mit 
varaiblen Prioritäten?)

> So ist alles sauber
> getrennt und man braucht keine Threads und -Synchronisation.

Uhm... Synchronisation brauchst Du immer, sobald nebenläufige 
Ereignisstränge existieren (und wenn es auch "nur" ISRs sind, die 
asynchron und nebenläufig mit der "main loop" ablaufen). Ein System, in 
dem ausschliesslich ISRs aktiv sind, ist schwer ohne Interruptverlust 
vorstellbar (davon mal abgesehen, dass viele Prozessoren nicht Alles in 
einem ISR erlauben, was im thread mode möglich ist), und selbst da kann 
es ja passieren, dass ein ISR durch einen Anderen einer höheren 
Priorität unterbrochen wird. Oder fehlt mir da etwas?

Trotzdem eine sehr interessante und fruchtbare Diskussion! :-)

von Dr. Sommer (Gast)


Lesenswert?

RAc schrieb:
> wie
> würdest Du damit z.B. "Hintergrundtasks" abhandeln, die Messwerte von
> mehreren Fühlern aufbereiten und verknüpfen, bevor sie an die
> Kommunikation weitergereicht werden?
z.B. mit einem Timer, oder man baut eine Ebene über die Treiber für die 
einzelnen Sensoren (für I²C,SPI,...), die per Callback den Empfang der 
Sensorwerte mitbekommt, und beim letzten eben die Auswertung durchführt.

RAc schrieb:
> Vor Allem wenn mehrere solcher
> Aktivitäten nebenläufig abgehandelt werden müssen, vielleicht sogar mit
> varaiblen Prioritäten?)
Man setzt dann entsprechend die Priorität des Timer/Sensor-Interrupts.

RAc schrieb:
> Uhm... Synchronisation brauchst Du immer, sobald nebenläufige
> Ereignisstränge existieren (und wenn es auch "nur" ISRs sind, die
> asynchron und nebenläufig mit der "main loop" ablaufen).
Ja, aber die ist viel einfacher, weil die einzelnen Abläufe nicht 
einfach "irgendwo" unterbrochen werden können und man somit alle 
möglichen Fälle bei der Synchronisation mit Mutexen o.ä. abdecken muss, 
sondern man sich darauf verlassen kann dass die vorige Abarbeitung in 
der jeweiligen ISR vollständig abgeschlossen ist und die Daten somit in 
konsistentem Zustand sind.

RAc schrieb:
> Ein System, in
> dem ausschliesslich ISRs aktiv sind, ist schwer ohne Interruptverlust
> vorstellbar
Ein System das so überlastet ist dass es nicht mehr alles beantworten 
kann, würde auch mit einem RTOS & Threads nicht mehr alles beantworten 
können...

RAc schrieb:
> und selbst da kann
> es ja passieren, dass ein ISR durch einen Anderen einer höheren
> Priorität unterbrochen wird.
Ja, man muss die Prioritäten so einstellen dass sich nur ISR's 
gegenseitig unterbrechen können, welche nicht auf die gleichen Daten 
zugreifen. Ansonsten müsste man mit Interruptsperren arbeiten 
(hässlich)...

RAc schrieb:
> Trotzdem eine sehr interessante und fruchtbare Diskussion! :-)
Tjo... Dass sich quasi die gesamte Betriebssystemtheorie und auch die 
meisten Embedded-Programme auf synchrone Programmierung (mit und ohne 
Threads) stützt irritiert mich etwas.

von Äpfel und Birnen (Gast)


Lesenswert?

> Trotzdem eine sehr interessante und fruchtbare Diskussion! :-)
ja, eine furchtbare Diskussion. Aus dem Loblied zu der Leistung
des F4 mit FPU ist die nutzlose Diskussion über das beste OS
für Embedded geworden. Anscheinend ist nur Linux ein richtiges
OS, weswegen z.B. RTOS, das von allen embedded CPU Herstellern
unterstützt wird nicht mal Erwähnung findet.
ARM-A Serie und Linux und ARM-M und RTOS ist die OS-Hose, die passt.
Aber um die Diskussion abzurunden, Raspi-3 + Windows10 IoT ist
doch das einzig wahre, oder ? Der meist verkaufte Embedded Computer
mit dem meist verkaufen OS.
Wenn wir in diesem Thread die Lösung gefunden haben, dann sollten wir 
dringend anschliessend auch noch die anderen seit Jahren schwelenden 
Fragen lösen:
Windows oder Linux ?
Atari oder Amiga ?
Z80 oder MOS6502 ?
Gamepad oder Maus+Keyboard ?
Atmel oder Microchip ?
AMD oder Intel ?
AMD oder NVidia ?
XBox oder Playstation ?
Welche CPU zum Einstieg in embedded ?
Welche Programmiersprachen ist die Beste ?
Nusspli oder Nutella ?

Warum haben Themen wie diese so viele Teilnehmer und
andere Fragen werden kaum beachtet ?
Oder sind das nur Phrasendrescher-Bots, die Klicks generieren für die 
Werbebanner ?

von Karl (Gast)


Lesenswert?

Äpfel und Birnen schrieb:
> Atmel oder Microchip ?

Du musst mit der Zeit gehen! (Und Du plenkst)
 SCNR

von Dr. Sommer (Gast)


Lesenswert?

Ein wichtiger Bestandteil der Ingenieursarbeit ist nunmal die Auswahl 
geeigneter Technologie. Und da die Lösung meistens keineswegs klar ist, 
kann man da schon mal drüber diskutieren.

von Äpfel und Birnen (Gast)


Lesenswert?

Fachsimpeln ist nicht zielsuchend, sondern Reden des Selbstzwecks wegen.

von Karl (Gast)


Lesenswert?

Sozusagen eine Kunstform.

von Markus (Gast)


Lesenswert?

Loll

von Jobst M. (jobstens-de)


Lesenswert?

Äpfel und Birnen schrieb:
> Windows oder Linux ?

Ich arbeite seit fast 20 Jahren mit Linux, nur beruflich mit Windows. 
Seit Windows 10 steht die Entscheidung: Linux :-)

> Atari oder Amiga ?

Keiner mehr. Auch wenn hier noch ein Amiga steht, welcher regelmäßig in 
Betrieb ist. (M68060, 50MHz, 160MB RAM, 2x SCSI, 1+2GB HDD, 2 
CD-Brenner, Picasso 4MB Grafikkarte, A2232 7x RS232 Karte, Ariadne 
Netzwerk)

> Z80 oder MOS6502 ?

Vermutlich Z80

> Gamepad oder Maus+Keyboard ?

Schnellschreiber werden mit einem Gamepad bestimmt nicht glücklich - die 
brauchen Klick.

> Atmel oder Microchip ?

8051 vielleicht von ExAtmel und MIPS von Microchip.

> AMD oder Intel ?

Wenn ein Chipsatz von Intel dafür existiert, gerne auch AMD.

> AMD oder NVidia ?

Egal.

> XBox oder Playstation ?

Würfel.

> Welche CPU zum Einstieg in embedded ?

Bo8 **hust*

> Welche Programmiersprachen ist die Beste ?

Brainfuck

> Nusspli oder Nutella ?

Majonaise.


Opel Manta oder Ford Capri?


> Warum haben Themen wie diese so viele Teilnehmer und
> andere Fragen werden kaum beachtet ?

Es ist das Herz ... :-D


Gruß
Jobst

von Lothar (Gast)


Lesenswert?

RiscOS pico für Pi bootet in <1sec und passt in 4MB Flash

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Lothar schrieb:
> RiscOS pico für Pi bootet in <1sec und passt in 4MB Flash

Das ist schön für RiscOS :-) NuttX bootet noch deutlich schneller.

Aber es ging um Linux.

von Lothar (Gast)


Lesenswert?

Dachte es geht um günstige FPU als uC Ersatz. RiscOS unterstützt sogar 
im BASIC Interpreter VFP und auch NEON die Demos sind auf einem 1 Core 
ARM11 wesentlich schneller als unter Raspbian mit 4 Core A53 mit C++ von 
Python gar nicht zu reden.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ruediger A. schrieb:
> Das ist in Embedded aber in der Regel nicht der Fall, weil alle Prozesse
> (dort normalerweise tasks genannt) als Ganzes zusammen arbeiten müssen.
> Wenn also z.B. in einem Zutrittskontrollsystem die Buchungstask "Mist
> baut," dafür aber die Ausweis- und Kommunikationstasks weiter laufen
> (weil eine MMU die Speicherbereiche gegeneinander abgrenzt), läuft das
> System als Ganzes trotzdem nicht richtig.

Ein Zutrittskontrollsystem ist eigentlich ein sehr gutes Beispiel dafür 
warum man gerne so eine Trennung haben möchte. Wenn ein böswilliger 
RFID-Transponder den Speicher des entsprechenden Tasks korrumpiert, dann 
sollte das möglichst keinen Einfluss auf den Task haben der die Tür 
aufschließt oder den der mit dem Firmennetzwerk kommuniziert. Ähnliches 
gilt für sämtliche IoT-Anwendungen und jede andere Anwendung die mit 
externen, potentiell böswilligen Geräten kommuniziert.

von Karl (Gast)


Lesenswert?

Da hast du Recht. freedom from interference kann man aber auch ohne ein 
os und ohne Prozessor mit mmu erreichen. Sinnvolles platzieren des 
stacks, Prüfung von stacküberlauf und nicht zuletzt eine MPU sind 
private Mittel.

von Olaf (Gast)


Lesenswert?

> Embedded Bereich eher selten. Warum sich da die Mühe mit der
> Synchronisation mehrerer Threads machen, wenn man auch alle Ereignisse
> schön sequentiell abarbeiten könnte?

Zusaetzlich zum schon genannten sei noch erwaehnten das an 
Embeddedsoftware heute durchaus Teams von 20-30Leuten arbeiten koennen. 
Ausserdem werden Teile der Software auch gerne in verschiedenen Geraeten 
verwendet. Da erleichtern Threads die Aufteilung der Arbeit und es 
bleibt fuer den einzelnen durchschaubarer.

Olaf

von Äpfel und Birnen (Gast)


Lesenswert?

wer einem Embedded System "Sicherheit" abspricht, der muss aber mir aber 
auch erklären, warum sowohl Win und Linux/Android auf einer ach so 
ausgefeilter  Hardware wie einem PC so gut wie ungeschützt gegen die 
täglich auftretenden Sicherhitslücken sind. Admin/Root Rechte zu 
bekommen scheint so gut wie immer möglich, wenn der PC nur am I-Net 
hängt. Manchmal hege ich den Eindruck, die vernetzten Systeme hben zu 
viel RAM/CPU Leistung, so das immer noch Platz für eine Backdoor/Virus 
ist. Wer findet in den Terabyte Weiten der HDD noch den Schadcode von 2 
kB oder den Task für den Keylogger auf einem 8-Core Handy ? In einem 
ATtiny13  oder PIC16F887 würde Schadcode auffallen wie ein bunter Hund, 
in den Codemonstern eines PCs/ARM-A nicht mal als Rauschen auffallen, 
wenn er denn keinen Schaden anrichten würde.

von (prx) A. K. (prx)


Lesenswert?

Äpfel und Birnen schrieb:
> wer einem Embedded System "Sicherheit" abspricht, der muss aber mir aber
> auch erklären, warum sowohl Win und Linux/Android auf einer ach so
> ausgefeilter  Hardware wie einem PC so gut wie ungeschützt gegen die
> täglich auftretenden Sicherhitslücken sind.

Bezogen auf vernetzte Geräte: Updates.
Wie oft werden Embedded Systems gefixed?

> Admin/Root Rechte zu
> bekommen scheint so gut wie immer möglich, wenn der PC nur am I-Net
> hängt.

Es ist immer möglich, aber fast alle derartigen Löcher sind noch 
unbekannt, zumindest ausserhalb von NSA&Co. Sobald sie bekannt werden, 
werden aktuelle Win/Linux Distributionen recht schnell gefixed, 
zumindest was die von aussen angreifbaren Löcher angeht. Zum Problem 
werden hauptsächlich Geräte, die aus diversen Gründen nicht auf Stand 
gehalten werden.

Ein ernstes Problem ist Android. Die Update-Zyklen von anderen Geräten 
als Googles Nexus/Pixel sind nach wie vor hundsmiserabel.

> In einem ATtiny13  oder PIC16F887 würde Schadcode auffallen

Ein ATtiny13 ist typischerweise nicht vernetzt.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Es kann auch sinnvoll sein, vernetzte Geräte intern zu trennen. Also 
statt sich auf Betriebssysteme, getrennte Prozesse und MMUs zu 
verlassen, kann es empfehlenswert sein, die für den Betrieb kritischen 
Grundfunktionen in einen µC wie AVR/Cortex-M/... zu brennen und die 
Vernetzung in einem separaten System durchzuführen. Mit auf das minimal 
notwendige Mass reduzierten und inhaltlich wie funktionell 
kontrollierten Schnittstellen dazwischen.

Das hat neben möglichen Löchern aufgrund komplexer Betriebssysteme auch 
den Vorteil, dass das äussere System wesentlich weniger stringent 
getestet werden muss und somit Updates davon einfacher und schneller 
möglich sind. So lange das Kernsystem unverändert bleibt. Für das 
äussere System kann man dann auf komplexe Systeme der RasPi-Klasse 
setzen und damit an Interface-Funktionalität gewinnen, ohne das 
Gesamtsystem zu riskieren.

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
Noch kein Account? Hier anmelden.