Forum: Mikrocontroller und Digitale Elektronik Arduino geeignet um sich mit Assembler zu beschäftigen?


von Emil G. (balsamico)


Lesenswert?

Hi ihr,

ziemlich enttäuscht muss ich gerade feststellen, dass im 
Mikrocontrollerkurs Assemblerprogrammierung nur sehr oberflächlich 
behandelt wird. Also werde ich mich da auf eigene Faust tiefer 
hineinfuchsen, mir macht das richtig Spaß.

Wir verwenden hier einen MSP430. Zuhause hätte ich einen Arduino liegen. 
Klar ist mir, dass man sich in jede Controllerfamilie separat 
einarbeiten muss, weil sich Befehlssätze, Speicherstrukturen usw. 
unterscheiden. Mir geht es darum, generell ein wenig fitter in Sachen 
Assemblerprogrammierung zu werden.

Deshalb meine Frage an euch: Eignet sich ein Arduino dafür genauso gut 
wie Controller der Familien MSP430, 8051..., die ja für Einführungen 
meist verwendet werden?

Oder sind Arduinos schon eher zu komplex zum Einstieg oder würde sonst 
irgendetwas eher dagegen sprechen? Dann würde ich natürlich einen 
anderen kaufen, sind ja nicht teuer... In dem Fall hätte ich nichts 
gegen Empfehlungen.

Danke

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


Lesenswert?

Es kommt auf den Arduino an. Wenn das ein AVR basierter ist, spricht 
nichts dagegen, mit ISP Programmer und AVR Assembler auch Assembler auf 
den Arduino zu programmieren, der ja nichts weiter als ein AVR mit ein 
wenig Peripherie auf einer Platine ist.

von Falk B. (falk)


Lesenswert?

@Emil G. (balsamico)

>Deshalb meine Frage an euch: Eignet sich ein Arduino dafür genauso gut
>wie Controller der Familien MSP430, 8051..., die ja für Einführungen
>meist verwendet werden?

Ja, ggf. sogar besser. 8051 ist der Klassiker aber nicht mehr wirklich 
up to date, vor allem wenn es um Assembler geht. MSP430 ist so lala.

>Oder sind Arduinos schon eher zu komplex zum Einstieg

Nein. Wobei man bei Arduino genau sagen muss, WELCHER Arduino. Die 
meisten basieren auf dem AVR, das ist der König von uC.net. Es gibt aber 
auch andere Arduinos, welche auf ESPxyz oder AT91SAM3X8E (Due) basieren. 
Das sind andere Mikrocontroller mit anderer Struktur und Assembler.

> oder würde sonst
>irgendetwas eher dagegen sprechen?

Nix.

von JJ (Gast)


Lesenswert?

Man muss sich im klaren sein, dass man eigentlich nicht mehr mit 
"Arduino" arbeitet, sondern lediglich mit dessen Platine und Chips.
Arduino beschreibt ja das ganze Ökosystem mit Libraries, IDE usw.

In diesem Fall wirst du ja nur mit einem ISP und dem Datenblatt (-Buch) 
bewaffnet den Controller direkt programmieren wollen.

von SebiR (Gast)


Lesenswert?

Ich glaube, für Assembler ist der PIC tatsächlich etwas geeigneter, weil 
weniger Befehle. Man muss sich nur an das Bank Switching gewöhnen.

von Peter D. (peda)


Lesenswert?

Prinzipiell ist auch der AVR-Assembler gut zu verstehen. Ist nur etwas 
umständlich, da man viel mit LD/ST bzw. IN/OUT arbeiten muß.

Der 8051 ist da einfacher, da man viele Operationen direkt im RAM/SFRs 
ausführen kann. Er hat auch hübsche Kombibefehle (DJNZ, MOVC) für 
Schleifen und Tabellenzugriffe. Und auch Bitbefehle, mit denen man 
logische Gleichungen quasi direkt hinschreiben kann (ORL C,/Bit usw.)

von Peter D. (peda)


Lesenswert?

SebiR schrieb:
> Ich glaube, für Assembler ist der PIC tatsächlich etwas geeigneter, weil
> weniger Befehle.

Weniger Befehle sind ein Nachteil, aber kein Vorteil. Man bricht sich da 
schnell einen ab, wenn die Programme etwas größer werden.
Hat man dagegen mehr Befehle, zwingt einen ja niemand, sofort alle zu 
benutzen. Aber sobald man komplexere Befehle braucht, freut man sich 
sehr, wenn es die schon gibt.
Du kannst auch AVR- oder 8051-Programme so umschreiben, daß Du mit 35 
Befehlen auskommst. Nur wird das weder Spaß machen, noch sonderlich 
lesbar sein.

SebiR schrieb:
> Man muss sich nur an das Bank Switching gewöhnen.

Leute, die bereits andere Architekturen kennen, werden (und wollen) sich 
nie daran gewöhnen.

von SebiR (Gast)


Lesenswert?

Ist vermutlich auch eher eine religiöse als eine technische 
Entscheidung.

Ich habe Assembler auf dem PIC gelernt und bin damit gut zu recht 
gekommen.

C dann aufm AVR.

von Einer K. (Gast)


Lesenswert?

Auch im Arduino AVR Umfeld kann man Assembler einsetzen.
Allerdings kann der Editor damit nicht umgehen, man braucht einen 
externen.
Automatisch Kompilieren, nur, wenn sich die *.S in einer Lib befindet.

Wie schon gesagt wurde:
Arduino Boards sind auch mit dem Atmel Studio nutzbar.
Wäre wohl die bessere Umgebung um AVR Assembler zu üben.

von Wolfgang (Gast)


Lesenswert?

Emil G. schrieb:
> Deshalb meine Frage an euch: Eignet sich ein Arduino dafür genauso gut
> wie Controller der Familien MSP430, 8051..., die ja für Einführungen
> meist verwendet werden?

Arduino hat nichts mit der Controller Familie. Es ist ein ziemlicher 
Unterschied, ob auf dem Arduino ein ATmega, ein Cortex-M3 oder sonstwas 
drauf ist.

von Stefan F. (Gast)


Lesenswert?

Die Arduino IDE und das dazugehörige Framework setzen auf C++.

Für den Einstieg in Assembler empfehle ich Dir das "alte" AVR Studio, 
denn da ist alles drin, was du brauchst. Sogar ein Debugger und ein 
handlicher Simulator.

Als Hardware kannst du gerne Arduino Module verwenden. Du solltest dabei 
allerdings berücksichtigen, dass das AVR Studio (wie auch das neuere 
ATmel Studio) den Arduino Bootloader nicht unterstützen. Also musst du 
zum Flashen entweder

a) in externes Tool (z.B. avrdude, eventuell mit GUI) benutzen. Das geht 
mit dem Bootloader, also direkt über den USB Anschluss des Arduino 
Moduls.

oder

b) einen Atmel kompatiblen ISP Programmieradapter verwenden. Den steckst 
du an den ISP Anschluss des Arduino Moduls an.

Vielleicht gefällt Dir dieses Tutorial dazu: 
http://stefanfrings.de/avr_workshop/index.html

Das alte AVR Studio kannst du mit offizieller Genehmigung von meiner 
Seite downloaden, falls Atmel es nicht mehr anbietet: 
http://stefanfrings.de/avr_tools/index.html

Für andere Controller Familien benötigst du andere Hardware und andere 
Software. Fange erstmal mit AVR an, denn dafür findest du am meisten 
Anleitungen.

von Walter S. (avatar)


Lesenswert?

SebiR schrieb:
> Man muss sich nur an das Bank Switching gewöhnen.

und wenn man sich mit Assembler genug gequält hat dann ist Bank 
switching das Sahnehäubchen oben drauf ;-)

von Stefan F. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Das alte AVR Studio kannst du mit offizieller Genehmigung von meiner
> Seite downloaden, falls Atmel es nicht mehr anbietet

Sorry, ich meinte natürlich Microchip.

von Emil G. (balsamico)


Lesenswert?

Danke euch allen. Jetzt weiß ich schon um einiges mehr.

Hab grade nachgesehen, hab einen at2560 :)

Stefanus F. schrieb:
> Für den Einstieg in Assembler empfehle ich Dir das "alte" AVR Studio,
> denn da ist alles drin, was du brauchst. Sogar ein Debugger und ein
> handlicher Simulator.

Ist die AVR besser als die Atmel Studio, weil es weniger umfangreich und 
deshalb einsteigerfreundlicher ist? -Oder aus einem anderen Grund?

von Stefan F. (Gast)


Lesenswert?

Die IDE "AVR Studio 4.x" ist weniger umfangreich und schneller. Für 
Assembler bietet das neue "Atmel Studio 7" meiner Meinung nach keine 
Vorteile.

Ganz sicher ist das Atmel Studio komplexer zu bedienen. Es basiert auf 
Visual Studio von Microsoft, schleppt daher eine Menge Ballast mit sich, 
den du sicher nicht brauchen wirst. So mancher scheitert beim Atmel 
Studio schon daran, Quelltext-Dateien hinzuzufügen und Compiler Optionen 
(Aufrufparameter) zu ändern.

Das AVR Studio ist deutlich überschaubarer gestaltet, darin findet man 
sich in der Regel ohne Hilfe zurecht.

Es sei denn, du bist bereits mit Visual Studio vertraut, dann würde ich 
das nehmen.

von supergrobi (Gast)


Lesenswert?

Heute Assembler auf 8 Bit lernen zu wollen, ist ja auch kontraproduktiv.

Warum bleibst du nicht einfach bei den MSP430?

Schau dir mal den AVR Assembler an! Der hat nichts von der
Eleganz der MSP430-Architektur.

von Karl M. (Gast)


Lesenswert?

Emil G. schrieb:
> Hab grade nachgesehen, hab einen at2560 :)

Was soll das sein?

Ein Bug?

von Stefan F. (Gast)


Lesenswert?

Karl M. schrieb:
> Emil G. schrieb:
>> Hab grade nachgesehen, hab einen at2560 :)
>
> Was soll das sein?
>
> Ein Bug?

Stell Dich doch nicht absichtlich dumm! Er hat ein Arduino Board mit 
ATmega2560. Vermutlich dieses: 
https://store.arduino.cc/arduino-mega-2560-rev3

Die Diskussion, welche CPU den elegantesten Assembler Befehlssatz hat, 
gehört hier nicht hin. Der TO hat klar gestellt, dass er Assembler 
lernen möchte, also auf Einsteiger-Niveau. Das kann er mit jedem 
Mikrocontroller machen, der nicht allzu kompliziert ist.

von Karl M. (Gast)


Lesenswert?

Danke Stefanus F. schrieb:
> Stell Dich doch nicht absichtlich dumm! Er hat ein Arduino Board mit
> ATmega2560. Vermutlich dieses:
> https://store.arduino.cc/arduino-mega-2560-rev3

Ja das hatte ich, warum sollte man nicht den korrekten Typ nennen 
wollen?

von Maxim B. (max182)


Lesenswert?

SebiR schrieb:
> Ich glaube, für Assembler ist der PIC tatsächlich etwas geeigneter, weil
> weniger Befehle.

Umgekehrt. Bei PIC braucht man normalerweise 2-3 Befehle, wo AVR nur 1 
reicht. So wird Programm übersichtlicher und verständlicher.

Als Beispiel: zwei Variablen addieren, die in den Registern sind. Bei 
AVR reicht 1 Befehl, PIC sollte noch Daten in W laden und danach 
irgendwo speichern.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Maxim B. schrieb:
> Umgekehrt. Bei PIC braucht man normalerweise 2-3 Befehle, wo AVR nur 1
> reicht. So wird Programm übersichtlicher und verständlicher.

Ich habe Assembler auf 6502 gelernt, dann auf Z80, dann auf 8051, dann 
auf AVR. Den 8051 empfand ich dabei als am angenehmsten.

Aber zum Lernen und auch für reale Anwendungen eignen sich alle gut. 
Heute empfehle ich AVR wegen der guten Informationslage und 
Verfügbarkeit.

von Maxim B. (max182)


Lesenswert?

Stefanus F. schrieb:
> Den 8051 empfand ich dabei als am angenehmsten.

Das kann ich nur zustimmen.
Im 2000 habe ich Projekt gemacht, wo 2051 und 51 zusammen arbeiteten. 
Dabei habe ich das ohne Computer, einfach mit Pseudo-Assembler auf dem 
Papierblatt gemacht. Mit AVR geht das kaum, da HEX-Code viel komplexer 
ist.

von supergrobi (Gast)


Lesenswert?

> Die Diskussion, welche CPU den elegantesten Assembler Befehlssatz hat,
> gehört hier nicht hin.

Aha, und ein PIC ist also zu winzig:
> Du kannst auch AVR- oder 8051-Programme so umschreiben, daß Du mit 35
> Befehlen auskommst. Nur wird das weder Spaß machen, noch sonderlich
> lesbar sein.

Natuerlich erleichtert ein orthogonaler und einigermassen vollstaendiger
Befehlssatz die Assemblerprogrammierung.
Und macht damit natuerlich auch das "Lernen" einfacher...

Die SW-Tools von TI (IDE, Compiler, Debugger) fuer MSP430 sind
mittlerweile auch kostenlos.

Und zum "richtige" Debuggen gibt es guenstige Einsteigerboards.
Deren Debug-Adapter kann fuer eigene Projekte ebenfalls genutzt werden.

Leg den AVR wieder in dunklen Karton und lass ihn da blos liegen.

von Maxim B. (max182)


Lesenswert?

supergrobi schrieb:

> Leg den AVR wieder in dunklen Karton und lass ihn da blos liegen.

Ich finde AVR aber gerade für Assembler-Lernen sehr geeignet, abgesehen 
von C51 natürlich... 32-bit sind für Assembler zu kompliziert, dort 
lieber C.

von Thomas W. (diddl)


Lesenswert?

Emil G. schrieb:
> ziemlich enttäuscht muss ich gerade feststellen, dass im
> Mikrocontrollerkurs Assemblerprogrammierung nur sehr oberflächlich
> behandelt wird.

Nun ja, Assembler ist zum Glück praktisch nicht mehr notwendig, wenn man 
von ganz speziellen Sonderfällen absieht.

Zum einen sind die C Compiler inzwischen so hoch optimierend, dass der 
Output auf Wunsch extrem klein oder extrem schnell ist.

Zum anderen decken Controller ein sehr weites Leistungs Spektrum ab und 
sind zudem noch extrem günstig zu haben. Wenn ich mit C nicht mehr 
auskomme, dann nehme ich einfach einen größeren Controller …



Emil G. schrieb:
> … mir macht das richtig Spaß.

Na dann …
… ist dir nicht zu helfen.

von Thomas E. (picalic)


Lesenswert?

Maxim B. schrieb:
> Als Beispiel: zwei Variablen addieren, die in den Registern sind. Bei
> AVR reicht 1 Befehl, PIC sollte noch Daten in W laden und danach
> irgendwo speichern.

Anderes Beispiel: Wenn man eine Speicherzelle im RAM incrementieren 
will, dann braucht der AVR dafür 3 Befehle, der PIC schafft das mit 
einem!

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Anderes Beispiel: Wenn man eine Speicherzelle im RAM incrementieren
> will, dann braucht der AVR dafür 3 Befehle, der PIC schafft das mit
> einem!

Da aber die meisten MCU-Architekturen RISC mit Load-Store sein dürften, 
ist es vielleicht besser sich das direkt wie beim AVR anzugewöhnen...

Der Cortex-M3 braucht auch 3 Befehle um eine Zahl zu inkrementieren 
(ldr,add,str).
Der Cortex-M4 kann in drei Befehlen (ldr,uadd8,str) 4 8-Bit Additionen 
durchführen.
Der Cortex-A8 kann in drei Befehlen (vldm, vadd.i8,vstm) 16 8-Bit 
Additionen durchführen.
Welcher ist jetzt besser... :-)

von Thomas W. (diddl)


Lesenswert?

Thomas E. schrieb:
> Anderes Beispiel: Wenn man eine Speicherzelle im RAM incrementieren
> will, dann braucht der AVR dafür 3 Befehle, der PIC schafft das mit
> einem!

Das ist völlig irrelevant.

Letztlich muss auch der PIC drei Schritte ausführen.
- RAM read
- ADD
- RAM write

Auch die OP-Code Breite sagt wenig aus.
Der Fetch einer 32 Bit CPU umfasst immer 4 Bytes (in einem Takt).

von Peter H. (peterhofbauer)


Lesenswert?

Hallo Emil G.

Meine Empfehlung für Assembler-Programmierer: dsPIC/PIC24.
Der Befehlssatz ist Assembler-freundlich und deutlich besser als beim 
ATMEGA. Und sehr gut dokumentiert.
Als IDE verwende ich die alte MPLAB IDE 8.91 Version. Die neuere MPLABX 
iat mir zu aufgeblasen.
Den IDE-Editor verwende ich nur beim Debuggen, zum schreiben PSPad.
Der dsPIC ist vor allem für Assembler-Programmierer interessant, 
C-Programmierer merken nichts und werden beim STM32 bleiben.
Ich habe mir mal die Frechheit erlaubt und einen Bericht für Anfänger 
verfasst:
http://www.hcp-hofbauer.de/indexwups3.htm

Gruß Peter

von supergrobi (Gast)


Lesenswert?

> Letztlich muss auch der PIC drei Schritte ausführen.
> - RAM read
> - ADD
> - RAM write

Noch einer der die PIC-Architektur nicht begriffen hat.

- Lade Operand1 in das Operandenhuelfsregister (W)
- Addiere Operand1 zu Operand2

Wobei Operand2 natuerlich schon an seinem Platz/Register ist.

Das blosse Inkrementieren schafft der PIC tatsaechlich mit 1 Befehl.

von Thomas E. (picalic)


Lesenswert?

Thomas W. schrieb:
> Letztlich muss auch der PIC drei Schritte ausführen.
> - RAM read
> - ADD
> - RAM write

Das ist aber irrelevant, weil es trotzdem nur ein Befehlszyklus ist.
Nicht irrelevant ist übrigens hier, daß beim PIC diese Operation nicht 
unterbrochen werden kann.
Maxim's Argument war aber die Anzahl der zu codierenden Befehle und 
damit die Übersichtlicheit und leichtere Erlernbarkeit durch 
übersichtlichere Programme. Mir ging es eigentlich eher darum, zu 
zeigen, daß man sich immer Beispiele 'raussuchen kann, um "seine" 
Architektur besser darzustellen.

von Stefan F. (Gast)


Lesenswert?

Wenn ein Operand schon in einem Register steht, kann der AVR mit einem 
einzigen Takt etwas dazu addieren. Dass Variablen Dauerhaft in Registern 
liegen, ist bei AVR Assembler Anwendungen durchaus üblich.

von supergrobi (Gast)


Lesenswert?

Dass Variablen Dauerhaft in Registern
liegen, ist bei PIC Assembler Anwendungen immer üblich.

von Stefan F. (Gast)


Lesenswert?

Wir vergleichen also rote Äpfel mit grünen Äpfeln und mit Birnen. Glaubt 
ihr ernsthaft, diese Pillepalle Details sind schon jetzt für den TO 
wichtig?

von supergrobi (Gast)


Lesenswert?

Wenn man durch aeussere Umstaende zum Einsatz einer gewissen
Architekur gezwungen wird, spielt das
> Pillepalle Detail
ueberhaupt keine Rolle.

Der TO moechte jedoch Assembler lernen.
Die Eleganz einer Architektur die sich eben auf Orthogonalitaet
und Vollstaendigkeit gruendet wird von dir ja negiert.
Die macht jedoch das Lernen lehrreich und damit einfach.

Der AVR (und die PICs auch) ist eine so alte Kruecke,
die gehoert allenfalls in Museum.

Und nicht als Lernhilfsmittel empfohlen.

von Upps (Gast)


Lesenswert?

Wenn du weiter rein gehst wirst du sehen dass die AVR-Opcodes sehr eigen 
zusammengesetzt werden, und einige IO-Bereiche komisch adressiert werden 
müssen weil sie irgendwie woanders eingeblendet wurden.

von Upps (Gast)


Lesenswert?

Ich meine natürlich nicht dass der AVR schlecht wäre, immerhin ist er 
sehr gut für schnelle Echtzeit-Spielereien geeignet!

von Emil G. (balsamico)


Lesenswert?

Danke euch allen für diese angeregte Diskussion. Ich lese hier unterm 
Strich raus, dass manches gegen einen AVR und anderes gegen einen PIC 
sprechen würde.

Fällt euch etwas ein, weshalb ihr mir von so einem MSP430-LaunchPad 
abraten würdet? An den ~10€ soll es nun wirklich nicht scheitern...

von supergrobi (Gast)


Lesenswert?

> Fällt euch etwas ein, weshalb ihr mir von so einem MSP430-LaunchPad
> abraten würdet? An den ~10€ soll es nun wirklich nicht scheitern...

Ja nuex.

Ausser das die MSP430 eine stellenweise "seltsame" Peripherie
und bis auf die Dickschiffe auch recht wenig RAM haben.

Aber der Befehlssatz ist Klasse!

von Maxim B. (max182)


Lesenswert?

Thomas E. schrieb:
> Wenn man eine Speicherzelle im RAM incrementieren
> will, dann braucht der AVR dafür 3 Befehle, der PIC schafft das mit
> einem!

PIC hat nicht einmal ununterbrochene RAM-Speicher. Man sollte dazu noch 
Verluste für Banking enkalkulieren.

Wenn es um Geschwindigkeit geht, arbeitet AVR mit Quarz-Frequenz. In PIC 
wird Quarz-Frequenz zuerst auf 4 dividiert! D.h. mit 20 MHz Quarz macht 
AVR 20 000 000 kompliziertere Befehle und PIC nur 5 000 000 weniger 
kompliziertere Befehle!

: Bearbeitet durch User
von Emil G. (balsamico)


Lesenswert?

supergrobi schrieb:
>> Fällt euch etwas ein, weshalb ihr mir von so einem MSP430-LaunchPad
>> abraten würdet? An den ~10€ soll es nun wirklich nicht scheitern...
>
> Ja nuex.
>
> Ausser das die MSP430 eine stellenweise "seltsame" Peripherie
> und bis auf die Dickschiffe auch recht wenig RAM haben.
>
> Aber der Befehlssatz ist Klasse!

Hast du ja heute schonmal gemeint. Die Idee mit dem AVR war ja nur, weil 
ich schon so ein Arduino-Board da habe. Wenn sonst niemandem was 
gravierendes einfällt, dann hol ich mir so ein MSP430-LaunchPad.

supergrobi schrieb:
> Schau dir mal den AVR Assembler an! Der hat nichts von der
> Eleganz der MSP430-Architektur.

Fällt dir da ein Beispiel ein? -nur aus Interesse...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Emil G. schrieb:
> Fällt euch etwas ein, weshalb ihr mir von so einem MSP430-LaunchPad
> abraten würdet? An den ~10€ soll es nun wirklich nicht scheitern...

Die MSP430 sind m.W. hauptsächlich auf Low-Power optimiert. Das ist an 
sich nicht verkehrt, aber wenn man sich da detailliert rein vertieft ist 
man quasi auf einen Anwendungsfall spezialisiert. Wenn man jetzt z.B. 
ARM lernen würde, kann man das Wissen auf alle möglichen Gebiete 
anwenden; allerdings ist der ARM Assembler nicht gerade 
anfängerfreundlich.

von Stefan F. (Gast)


Lesenswert?

supergrobi schrieb:
> Der AVR (und die PICs auch) ist eine so alte Kruecke,
> die gehoert allenfalls in Museum.
> Und nicht als Lernhilfsmittel empfohlen.

So ein Quatsch. Die Grundlagen von Assembler kannst du mit jeder 
beliebigen CPU erlernen. Hinderlich wäre höchsten allzu komplexe 
Peripherie rund um die CPU.

Die ganze AVR Serie wird nicht nur aktuell produziert und benutzt, 
sondern auch weiter entwickelt. Aber selbst wenn das nicht der Fall 
wäre, spielt es keine Rolle.

Deine MSP430 Serie ist jedoch mit ihren 16 Bit inzwischen eine seltsame 
Besonderheit.

von chris (Gast)


Lesenswert?

Meiner Meinung nach ist gibt es im Moment nur zwei Assembler, mit denen 
man sich beschäftigen sollte:

1. ARM
2. RISC V

Nimm also irgendein ARM-Board z.B. den Arduino Zero mit Debugging 
Interface und versuche es damit.
ARM hat den höchsten Verbreitungsgrad im Gegensatz zu den anderen MCUs 
und wird zunehmend die anderen Architekturen verdrängen.

Der ARM-Cortex-M0 Befehlssatz hat 56 Instruktionen. Das Ganze ist also 
ziemlich übersichtlich zum lernen. Es bringt keine Vereinfachung einen 
8051, AVR oder sonstige 8-Bitter zu nehmen.

von supergrobi (Gast)


Lesenswert?

> Fällt dir da ein Beispiel ein? -nur aus Interesse...

Da hoffe ich mal das du der englischen Zunge maechtig bist und
empfehle die Lektuere des Dokuments von TI: SLAA024
"MSP430 Family Mixed-Signal Microcontroller Application Reports"
von Herrn Lutz Bierl (besonders die Kapitel 8, 9 und 7).
Da gibt es nebenbei auch gleich eine gute Einfuehrung in
die Assemblersprache des MSP430.

Die MSP430 sind nebenbei eine deutsche Entwicklung.

von supergrobi (Gast)


Lesenswert?

> Meiner Meinung nach ist gibt es im Moment nur zwei Assembler, mit denen
> man sich beschäftigen sollte:
>
> 1. ARM
> 2. RISC V

Das sind ja nicht nur zwei :-).

Den einfachen M0 hast du ja schon erwaehnt. Dann kaemen dann
im Embeddedbereich noch M0+, M3, M4 und vllt noch M7 dazu.
Von den dicken Brummern (A/R) noch gar nicht zu reden.

Ab ARM M3 wird es doch deutlich umfangreicher und komplexer.

Aber wer mit einem MSP430 in Assembler klar kommt, wird das
auch spaeter leicht mit einem ARM M0 schaffen, sofern er den
nicht gleich in C programmiert.

von chris (Gast)


Lesenswert?

>Den einfachen M0 hast du ja schon erwaehnt. Dann kaemen dann
>im Embeddedbereich noch M0+, M3, M4 und vllt noch M7 dazu.

Was willst Du damit sagen? Hast Du Dich schon mal mit dem Befehlssatz 
befasst?

von supergrobi (Gast)


Lesenswert?

> Was willst Du damit sagen? Hast Du Dich schon mal mit dem Befehlssatz
> befasst?

Ich kenne noch droellfzig andere Controller.
Mindestens.

von chris (Gast)


Lesenswert?

und jetzt?

von Volker A. (Gast)


Lesenswert?

Hallo Emil G.!

Ich beschäftige mich auch gerade mit solchen Sachen (Assermbler + C auf 
Arduino Uno (ATmega328p). Auf dem Arduino Mega (ATmega2560) ist alles 
ähnlich)

Zum Einstieg versuche ich immer auf IDEs und so zu verzichten und 
arbeite mit den Kommandozeilen-Tools (auf die eine IDE ja intern auch 
zugreift).

Auf  https://www.instructables.com/id/Command-Line-AVR-Tutorials/   gibt 
es Tutorials zum Thema

Im ersten Tutorial wird erklärt, wie man mit Editor, AVR-Tools und 
AVRdude zum Ziel kommt. Allerdings wird von Linux auf dem 
Entwicklungsrechner ausgegangen. Dort heisst der Assembler avra. Unter 
Windows läuft das alles ähnlich, hier nimmt man  avrasm2 (musst mal bei 
den Kommentaren zum Tutorial 1 gucken)

Ich habe dort nur die ersten 3 Tutorials durchgearbeitet, mir war das zu 
unsystematisch. Wenn das erste LED_Blink erstmal läuft, kann man sich 
auch andere AVR Tutorials suchen, wobei die verschiedenen ATmega sich in 
den Registern mehr oder weniger unterscheiden. Da muss man sich dann ggf 
mal durch die Datasheets wühlen.

Es gibt noch einen anderen Assembler (avr-as). Der unterstützt aber eine 
abweichende Syntax (z.B. andere Assembler-Direktiven).

von chris (Gast)


Lesenswert?

Man könnte einen Cortex M0 Simulator auf eine AVR laufen lassen
https://github.com/bravegnu/usim
Das wär doch mal was ;-)

von blabla (Gast)


Lesenswert?

supergrobi schrieb:
> Ich kenne noch droellfzig andere Controller.
> Mindestens.

Und ich wette, dass du nicht einen einzigen davon richtig kennst, 
sondern einfach nur ein Schwätzer bist.

von Manfred (Gast)


Lesenswert?

Emil G. schrieb:
> Oder sind Arduinos schon eher zu komplex zum Einstieg

Diese Fragestellung solltest Du Dir selbst beantworten können, mit 
minimal eigenem Denkvermögen.

Was ist ein Arduino: Schaue den Typ an (Uno, Nano, ProMini ..) und 
besorge von der Arduino-Webseite den Schaltplan.

Gucke den Schaltplan an: Ach ja, ein Mikrocontroller, meistens ein 
ATmega328 mit der notwendigen Beschaltung (Quarz, Spannungsregler) drum 
herum.

Wann wird aus einem Mikrocontroller ein Arduino: Er bringt, im Gegensatz 
zum fabrikfrischen Controller, schon etwas Software mit - den 
Bootloader.

Wie bekommt man Software in einen fabrikfrischen ATmega: Das 
Datenblatt erklärt das, es geht über seine Programmierschnittstelle ISP. 
Im Schaltplan findet man 6 Pins, auf die diese herausgeführt ist. Du 
brauchst natürlich ein Stück Programmierhardware zum AT328 passend.

Du hast also für kleines Geld ein fertiges Stück Hardware, niemand 
zwingt Dich, die Arduino-Entwicklungsumgebung und deren Bootloader zu 
nutzen.

Also, genau so, wie es einige aus diesem Forum tun: Der Arduino kann 
einfach als Controller betrachtet werden und natürlich auch in Assembler 
programmiert werden, da ist nichts "zu komplex" dran.

Ist mein Ton jetzt böse oder arrogant ... ja, dann sei es so: 
Beitrag "Arroganz-Bundeswettbewerb" - ich stelle es genau 
so dar, wie ich es sehe. Wer programmieren will, muss sich auch mit der 
Hardwareumgebung befassen, und die bietet der Arduino eben günstig und 
fertig an.

In Deinem Fall würde ich auf den ProMini schauen, den der Chinese für 
niedrig einstellige Euro liefert, es spricht aber wenig dagegen, auch 
einen Uno zu verwenden.

von blabla (Gast)


Lesenswert?

Manfred schrieb:
> es spricht aber wenig dagegen, auch
> einen Uno zu verwenden.

Vor allen Dingen spricht nichts dagegen, den Mega zu nehmen. Den hat er 
nämlich schon.

von chris (Gast)


Lesenswert?

Hier:
https://www.asm80.com/
Z80 Assembler online. Ohne Installation.

von chris (Gast)


Lesenswert?

6502 wäre vielleicht auch nicht schlecht:
http://www.6502asm.com/

von Manfred (Gast)


Lesenswert?

Stefanus F. schrieb:
> Ich habe Assembler auf 6502 gelernt, dann auf Z80, dann auf 8051, dann auf AVR.

Auf 6504 habe ich mit ASM angefangen, danach eine eigene Europakarte mit 
6502, 6532 und 6522 und Akkugepuffertem RAM gemacht.

Danach kamen Controller 68HC805, wieder auf einer eigenen Platine mit 
einem achtstelligen Display drauf - im Prinzip das, was viele Jahre 
später für einen Bruchteil des Preises der Arduino gekonnt hätte.

x80xx war nicht relevant, 68xxx hatten wir im Menge in Serienprodukten 
im Einsatz.

Dann kam irgendwann der berufliche Abschied vom Lötkolben in Richtung 
Server und Jahre später der Bedarf an Mikrocontrollern für private 
Zwecke. Ich habe keine Bock mehr auf Assembler und bin aktuell mit 
Arduinos samt deren Kinder-IDE gut bedient.

Irgendwie schade, die alte Hardware 6502 / 68x05 habe ich noch 
verfügbar, für 6502 sogar noch einen Hardware-Emulator - aber die Zeiten 
ändern sich, soll ich mich damit noch quälen?

chris schrieb:
> 6502 wäre vielleicht auch nicht schlecht:
> http://www.6502asm.com/

Ich glaube, alles, was ich damit gemacht habe, könnte ich heute mit dem 
ATmega in C++ wesentlich einfacher haben.

von Egon D. (Gast)


Lesenswert?

Stefanus F. schrieb:

> Deine MSP430 Serie ist jedoch mit ihren 16 Bit
> inzwischen eine seltsame Besonderheit.

Naja, ich würde das als etwas verdrehte Sichtweise
betrachten und sagen, dass die AVRs mit ihren 8 Bit
eine seltsame Besonderheit sind.

Auf 8 Bit verkürzte Register haben nämlich gegenüber
16 Bit langen Registern keinerlei TECHNISCHEN Vorteil
(der möglichweise niedrigere Preis wäre ein ÖKONOMISCHER
Vorteil, kein technischer), aber dafür den Nachteil,
dass man für Adressrechnungen immer mit zwei Registern
basteln muss.

Ich bin vor Jahrzehnten mit dem Z80 großgeworden. Wenn
ich heute freie Wahl für den Einstieg hätte, würde ich
vermutlich den MSP430 wählen -- 8 Bit würde ich mir
nicht mehr antun wollen, und ARM wäre mir eine Nummer
zu groß.

von chris (Gast)


Lesenswert?

>Auf 8 Bit verkürzte Register haben nämlich gegenüber
>16 Bit langen Registern keinerlei TECHNISCHEN Vorteil

Genau. Und deshalb gehen wir lieber gleich auf 32 Bit mit dem ARM Cortex 
M0 mit seinen übersichtlichen 56 Instruktionen. Dessen Code ist dann 
noch aufwärtskombatibel zum M3, M4 und M7.
Dann sind wir wenigstens aktuell, wenn es schon Assembler sein muss.

von chris (Gast)


Lesenswert?

Falls man den 8051 mag, kann man EDSIM51 verwenden:
https://www.edsim51.com/

Assembler+Simulator.

von Egon D. (Gast)


Lesenswert?

chris schrieb:

>>Auf 8 Bit verkürzte Register haben nämlich gegenüber
>>16 Bit langen Registern keinerlei TECHNISCHEN Vorteil
>
> Genau. Und deshalb gehen wir lieber gleich auf 32 Bit
> mit dem ARM Cortex M0 mit seinen übersichtlichen
> 56 Instruktionen.

... oder man bleibt eben beim MSP430 mit 27 Instruktionen.

von chris (Gast)


Lesenswert?

>... oder man bleibt eben beim MSP430 mit 27 Instruktionen.

Beim Spielchen "wer bietet weniger" biete ich die J1-CPU wie sie im 
FT800 Display Treiber eingebaut ist mit 16 Befehlen:
https://nanode0000.wordpress.com/2017/04/08/exploring-the-j1-instruction-set-and-architecture/

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.