Forum: Offtopic Welcher ist der BESTE(tm) Mikrocontroller?


von Christian (dragony)


Lesenswert?

Hallo,

die Frage, welcher der BESTE uC ist, hängt natürlich vom Anwendungsfall 
ab. Konkret geht es hier aber nicht um die Anwendung, sondern um die 
Möglichkeit der Programmierung in Assembler.

Programmiert man einen uC in C, bekommt man ja eh nicht mehr mit, was im 
Hintergrund für Befehle ausgeführt werden. Das ist ja alles transparent.

Wenn man allerdings gerne in ASM programmiert, spielt es eine sehr 
wichtige Rolle, wie intuitiv (und damit einfach) sich die Programmierung 
gestaltet.

An erster Stelle kommt der Befehlssatz. Je mächtiger die Kernbefehle 
sind, desto weniger Befehle braucht man und desto einfacher ist das 
Programm dann auch lesbar.

An zweiter Stelle kommt die Anzahl der Register. Je mehr Arbeitsregister 
man hat, desto einfacher lässt sich programmieren. Man kann länger mit 
den Registern arbeiten, bevor man mit dem RAM rumfrickeln muss. Mal eben 
eine globale Variable in ein Register ablegen tut weniger weh, wenn man 
viele davon hat.

Derzeit programmiere ich ausschliesslich AVRs. Mit 32 Arbeitsregistern 
wirklich sehr angenehm.

Allerdings sieht es so aus, als ob der Trend zu ARM geht. Mittlerweile 
gibt es ARMs für 30 Cent und die 8-Bitter werden immer teurer. Jetzt 
habe ich mir den ARM mal angeschaut und die Programmierung in ASM 
scheint wirklich eine Quälerei zu sein. Viel weniger Register, viel mehr 
zu beachten und deshalb natürlich auch viel dickere Handbücher. Es sieht 
fast so aus, als ob die Designer sich dachten, dass 99% der Welt die 
Teile eh in C programmiert und die deshalb nicht mehr angenehm von 
Menschen programmiert werden können.

Was meint ihr? Und gibt es sinnvolle Alternativen?

: Verschoben durch User
von Gaast (Gast)


Lesenswert?

Arm, c, asm wenn es sein muss für startup - den kann man auf cortex aber 
auch in c schreiben.

Welchen Hersteller?

Egal, such nach dem was du brauchst, sortiere nach preis, sortiere das 
aus, was du nicht löten kannst - den lpc1769 gibts z.b. auch in wafer 
bga...

Dann nimmst du entweder einen RPI - gibts ab 5$ als jtag/swd dongle mit 
openocd.

Ziehe dir gnuarm eclipse, da gibts board/cpu packs mit register files - 
oder du nimmst dir das svd file vom hersteller und lässt das register 
file generieren. Oder du nutzt die IDE des Hersteller - lpcexpresso geht 
bis 256k, das reicht meistens, wenn nicht nimm die open source Lösung, 
wie gerade beschrieben - ist auch universell und Hersteller unabhängig.

Dann nimmst du gcc oder clang als cross compiler.

Und es ist dir ziemlich egal woher die CPU kommt.

Achte vielleicht noch dass es eine Familie ist, wo man mehr oder weniger 
Speicher bekommen kann und Fange mit einem eval board mit maximalem 
Speicher an.

Wenn das Projekt mit eval board geht, kannst du auch das ganze zurecht 
schneiden.

Wenn du den sevice von seeedstudio nutzten willst, Dir auch das board zu 
bestückeb, nehme eine CPU, die in er open parts library ist. Lpc1769 ist 
da ein heisser Kandidat... Es gibt aber auch einen kleineren von st...

Wenn du was exotisches haben willst, nimm esp8266, leicht zu 
programmieren und hat wifi in chip.

Wenn du was fürs steckbret willst, bleib beim atmega328 - 
preislich/Leistung ist jeder arm oder esp8266 aber besser.

Ich würde meine Zeit auf keinen Fall mehr mit Assembler verschwenden. 
Also fallen alle controller weg, für die es kein GCC Backend gibt ;-)

von Oliver S. (oliverso)


Lesenswert?

6809

Dem traure ich heute noch nach ;)

Oliver

von M. K. (sylaina)


Lesenswert?

Christian S. schrieb:
> die Frage, welcher der BESTE uC ist, hängt natürlich vom Anwendungsfall
> ab. Konkret geht es hier aber nicht um die Anwendung, sondern um die
> Möglichkeit der Programmierung in Assembler.

Wenn du lustig bist kannst du auch den Skylake in Assembler 
programmieren, daher kann man ohne konkrete Anwendung schlicht gar nicht 
sagen welcher Mikrocontroller der Beste ist.

von Clemens L. (c_l)


Lesenswert?

Christian S. schrieb:
> Wenn man allerdings gerne in ASM programmiert

... was heutzutage halt praktisch keiner mehr macht. Ob gerne oder 
nicht.

> Es sieht fast so aus, als ob die Designer sich dachten, dass 99% der
> Welt die Teile eh in C programmiert

ARM stand mal für "Acorn RISC Machine". Wie bei anderen RISC-Designs ist 
die Architektur bewusst für Compiler optimiert. (Und 99% ist zu niedrig 
geschätzt.)

> gibt es sinnvolle Alternativen?

Ich mag den MSP430. Das ist aber auch nur eine persönliche Meinung.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian S. schrieb:
> Und gibt es sinnvolle Alternativen?
Ja. Nimm als Alternative zum Assembler einfach C...

: Bearbeitet durch Moderator
von eagle user (Gast)


Lesenswert?

Oliver S. schrieb:
> 6809
>
> Dem traure ich heute noch nach ;)

Die Freescale (HC)S12(X) könnten als Nachfolger durchgehen. Zum 
Ausgleich für ein paar fehlende Feinheiten gibt es die mit aktuellen 
I/O-Modulen und 1MB Flash auf dem Chip.

http://www.nxp.com/products/microcontrollers-and-processors/more-processors/8-16-bit-mcus:8-16-BIT-MICROCONTROLLERS

Bei 6809 fällt einem natürlich der 68000 ein; auch der hat Nachwuchs 
bekommen:

http://www.nxp.com/products/microcontrollers-and-processors/more-processors/coldfire-plus-coldfire-mcus-mpus:PC68KCF

Die beiden lassen sich schon sehr angenehm in Assembler programmieren. 
Aber es geht noch deutlich besser. Mit dem VAX-Macro-Assembler und 
-Linker und den Maschinenbefehlen braucht man kein C.

http://www2.hmc.edu/www_common/OVMS072-OLD/72final/4515/4515pro.html

Und von wegen "das ist doch kein uP": die MicroVAX gab's auch in 
Bastler-freundlichen Gehäusen

http://www.vaxination.ca/vms/microvax/mv_ii.html

von Ulrich F. (Gast)


Lesenswert?

Wie wäre es mit dem GA144 von Greenarrays?
Damit hat man kein C oder ASM Problem.

von Lothar (Gast)


Lesenswert?

Christian S. schrieb:
> Jetzt habe ich mir den ARM mal angeschaut und die Programmierung in ASM
> scheint wirklich eine Quälerei zu sein

ARM ASM ist für den Anfänger sehr einfach und klar strukturiert. Das 
erste ARM Betriebssystem von 1989 ist komplett in ASM geschrieben, hier 
mal für den Raspberry Pi:

https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HAL/BCM2835/s/

Christian S. schrieb:
> Derzeit programmiere ich ausschliesslich AVRs. Mit 32 Arbeitsregistern
> wirklich sehr angenehm.

Wer so viele Register braucht sollte den 8051 gut finden 4x 8 Register + 
80 als Register nutzbare Speicherstellen gibt 112 :-)

Christian S. schrieb:
> Mittlerweile gibt es ARMs für 30 Cent und die 8-Bitter werden immer teurer

Welche denn? Und die 8051 kosten bei gleicher Ausstattung immer noch die 
Häfte z.B. kleinster ARM mit USB ab 2.50 EUR und gleicher 8051 mit USB 
1.50 EUR Das der kleinste AVR mit USB viel teurer ist sagt eher was über 
Atmel aus.

http://www.mouser.de/ProductDetail/NXP-Semiconductors/LPC11U14FBD48-201/?qs=sGAEpiMZZMtXqW1IUNX6MKATeJoK9A5C

http://www.mouser.de/ProductDetail/Silicon-Labs/EFM8UB20F32G-A-QFP48/?qs=sGAEpiMZZMu6TJb8E8CjrwwHrm3kwS2LYoXxmeLYWso%3d

von Tom Thomsen (Gast)


Lesenswert?

Christian S. schrieb:
> die Frage, welcher der BESTE uC ist, hängt natürlich vom Anwendungsfall
> ab. Konkret geht es hier aber nicht um die Anwendung, sondern um die
> Möglichkeit der Programmierung in Assembler.

Der BESTE µC ist wohl derjenige, mit dem man vernünftig umgehen kann. 
Was nützen die tollsten Fähigkeiten, wenn man in Assembler rum stümpert.

von Rudolph R. (rudolph)


Lesenswert?

Lothar schrieb:
> Wer so viele Register braucht sollte den 8051 gut finden 4x 8 Register +
> 80 als Register nutzbare Speicherstellen gibt 112 :-)

Kommt darauf an, was man unter "Register" versteht und ob man einen Akku 
noch für zeitgemäß hält. :-)

von Jim M. (turboj)


Lesenswert?

Lothar schrieb:
 Und die 8051 kosten bei gleicher Ausstattung immer noch die
> Häfte z.B. kleinster ARM mit USB ab 2.50 EUR und gleicher 8051 mit USB
> 1.50 EUR Das der kleinste AVR mit USB viel teurer ist sagt eher was über
> Atmel aus.

Nö. ARM MCUs mit USB gibts ab 1,51 € auch bei Mouser: 
http://www.mouser.de/search/ProductDetail.aspx?R=0virtualkey0virtualkeyEFM32HG110F64G-A-QFN24

Die sind nicht mehr teurer als 8051ger.

von Lothar (Gast)


Lesenswert?

Jim M. schrieb:
> ARM MCUs mit USB gibts ab 1,51 € auch bei Mouser
> Die sind nicht mehr teurer als 8051ger

Das 8051 Beispiel war ein EFM8 von Silabs und Dein ARM Beispiel ist ein 
EFM32 von Silabs. Soweit ich das sehe hat kein anderer Hersteller so 
billige ARM. Trotzdem hat der EFM32 noch zwei technische Nachteile 
gegenüber dem EFM8 bei USB:

- der EFM8 schafft Full Speed USB mit dem internen Oszillator der EFM32 
braucht einen externen Quarz

- der EFM8 unterstützt High Memory so dass der USB Bootloader direkt ein 
"normales" Binary mit Startadresse 0 laden kann beim EFM32 ist der 
Bootloader ab Startadresse 0 so dass das Binary Relocatable neu 
kompiliert werden muss für ab Adresse &4000

von Frank K. (fchk)


Lesenswert?

Christian S. schrieb:

> Allerdings sieht es so aus, als ob der Trend zu ARM geht. Mittlerweile
> gibt es ARMs für 30 Cent und die 8-Bitter werden immer teurer. Jetzt
> habe ich mir den ARM mal angeschaut und die Programmierung in ASM
> scheint wirklich eine Quälerei zu sein. Viel weniger Register, viel mehr
> zu beachten und deshalb natürlich auch viel dickere Handbücher. Es sieht
> fast so aus, als ob die Designer sich dachten, dass 99% der Welt die
> Teile eh in C programmiert und die deshalb nicht mehr angenehm von
> Menschen programmiert werden können.

Dieser Absatz zeigt mir, dass Du die Konzepte und Ideen dahinter nicht 
verstanden hast. ARM ist so schlecht nicht, auch wenn sie damals 
beispielsweise das Interrupt-Konzept vergurkt hatten - den Fehler haben 
sie mit Cortex wieder ausgebügelt.
Die YouTube-Videos mit Steve Furber (einem der ursprünglichen Entwickler 
bei ACORN) sind schon ganz nett.

Manche Leute brauchen Papier zum Lesen. Denen sei das hier angeraten:

http://www.amazon.de/Definitive-Guide-Cortex-M3-Cortex-M4-Processors/dp/0124080820

fchk

von (prx) A. K. (prx)


Lesenswert?

Christian S. schrieb:
> fast so aus, als ob die Designer sich dachten, dass 99% der Welt die
> Teile eh in C programmiert und die deshalb nicht mehr angenehm von
> Menschen programmiert werden können.

Nicht "fast". Genau das ist der Ursprung der RISC Philosophie. In den 
70ern stellte man anhand von Analysen bestehender Programme fest, dass 
Compiler nur einen Bruchteil der Befehle häufig nutzen. Eine CPU mit 
schnellen einfachen Befehlen erwies sich als billiger und schneller als 
die damaligen komplexen CPUs.

https://de.wikipedia.org/wiki/IBM_801

: Bearbeitet durch User
von Lothar (Gast)


Lesenswert?

Frank K. schrieb:
> ARM ist so schlecht nicht, auch wenn sie damals
> beispielsweise das Interrupt-Konzept vergurkt hatten - den Fehler haben
> sie mit Cortex wieder ausgebügelt

Das ist doch wohl eine Legende. Die Cortex A und die Cortex R für harte 
Echtzeit in Automotive und Industriesteuerungen haben genau das 
Interrupt-Konzept der ursprünglichen ARM. Für die Cortex M wurde ein 
neues Interrupt-Konzept eingeführt, weil sich die uC Programmierer nicht 
in der Lage sahen, für die ISR Assembler Wrapper zu machen, es musste 
alles direkt in C gehen. Das führt aber zu neuen Problemen: keine 
re-entranten ISR, ISR Einsprung bei korruptem Stack führt zu Hardfault 
weil keine FIQ Registerbank mehr usw. Nebenbei für den dann 
erforderlichen Hardfault Handler braucht es dann doch wieder einen 
Assembler Wrapper, der auch noch viel komplizierter ist :-)

von nix^2 (Gast)


Lesenswert?

ACHTUNG!!!!
Schwanzvergleich!!!!
schon allein die frage disqualifiziert ihn....

von (prx) A. K. (prx)


Lesenswert?

Lothar schrieb:
> Das ist doch wohl eine Legende. Die Cortex A und die Cortex R für harte
> Echtzeit in Automotive und Industriesteuerungen haben genau das
> Interrupt-Konzept der ursprünglichen ARM.

Das Interrupt-Verfahren der ursprünglichen ARM Architektur ist wirklich 
vergeigt worden. Interessanterweise gleich zweimal. Es ist dennoch 
verwendbar.

Es wurde anfangs nicht an verschachtelte Interrupts einer Klasse gedacht 
(IRQ/FIQ). Die waren im jeweiligen Interrupt-Kontext nicht machbar, weil 
das kombinierte PC/Status-Register im Linkregister vom Interrupt-Kontext 
gesichert wurde. Man musste daher im Handler immer erst einmal auf einen 
anderen Kontext umschalten bevor die Interrupts wieder freigegeben 
wurden.

Mit der Abkehr vom 26-Bit Programmadressraum und der Trennung von PC und 
Statusregister in ARMv3 war das so nicht mehr machbar und ein separates 
Sicherungsregister für den Status wurde eingeführt. Hätte man zu diesem 
Zeitpunkt ein analoges Sicherungsregister für den PC definiert, dann 
wäre der Overhead eines Handlers deutlich geringer und der IRQ-Stack 
voll verwendbar geworden. Da man dies unterliess blieb das Problem 
unverändert erhalten.

Wesentlich später (ARMv6T2, ARMv7-A/R) wurden mit den neuen Befehlen 
SRS,RFE,CPS Nested-Interrupt-Handler deutlich vereinfacht und 
beschleunigt.

: Bearbeitet durch User
von Автомат К. (dermeckrige)


Lesenswert?

Die besten Mikrocontroller kommen aus dem Hause Microchip ;-)

von (prx) A. K. (prx)


Lesenswert?

Автомат К. schrieb:
> Die besten Mikrocontroller kommen aus dem Hause Microchip ;-)

Nö, das war der PIC1650 aus dem Hause General Instrument. ;-)

von Georg A. (georga)


Lesenswert?

Viel interessanter wäre doch eigentlich die Frage, welcher der 
schlechteste Microcontroller ist ;)

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.