Forum: Mikrocontroller und Digitale Elektronik AVR versus ARM


von Stefan F. (Gast)


Lesenswert?

Eigentlich mag ich dieses Thema nicht, weil es immer zu endlosen 
Diskussionen führt, die im Kreis laufen. Mangels Erfahrung, hatte ich 
mich dabei bisher weitgehend zurück gehalten.

Aber jetzt möchte ich auch mal meinen Senf dazu geben, denn ich habe 
seit ein paar Tagen ein ARM Kit auf dem Tisch liegen und spiele damit 
herum.

Als Hauptargument für ARM wird hier oft angegeben, daß man für gleiches 
Geld und Stromaufnahme viel mehr Leistung bekommen würde. Dem kann ich 
nicht zustimmen. Und zwar darum:

Wenn ich von einem ATmega328P ausgehend auf einen STM32F103CB wechsele, 
dann bleibe ich ungefähr in der gleichen Preisklasse (jedenfalls was 
Endverbraucher die bei Conrad/Reichelt einkaufen angeht) und die 
Stromaufnahme ist ähnlich.

Dafür erhalte ich 4x soviel Flash Speicher. Aber meine Programme sind 
auch locker doppelt so groß.

Laut Marketing Geschwätz erhalte ich 72 Mhz, aber effektiv kommen da 
wegen der nötigen Waitstates nur 24 Mhz heraus - was kaum mehr ist, als 
meine geliebten AVR's können.

Natürlich gibt es auch viel größere ARM's, die wären dann allerdings 
nicht mehr wirklich mit AVR's zu vergleichen, da sie in jeder Hinsicht 
in einer anderen Liga spielen.

Ich muss schon zustimmen, dass man bei ARM Controllern etwas mehr fürs 
gleiche Geld bekommt. Aber es ist IMHO nicht so viel mehr, wie hier 
meistens gesagt wird.

ARM Architektur zu erlernen erscheint mir dennoch sinnvoll, eben weil 
man da mehr Luft nach oben hat. Wenn ich mit einem Atmega1284 nicht mehr 
auskomme, wird es eng. Bei ARM könnte ich relativ schmerzfrei den nächst 
größeren verwenden - bis in den Gigahertz und Gigabyte Bereich.

Xmegas würde ich zum Lernen nicht empfehlen. Das sind meiner Meinung 
nach halbgare Produkte, die den Befehlssatz von AVR mit der besseren I/O 
Hardware von ARM zu kombinieren versuchen. Damit wird meiner Meinung 
nach eine Lücke gefüllt, von der mir gar nicht bewusst war, dass sie 
existiert. Ich brauche sie jedenfalls nicht.

Einsteigern, die gerade mal wissen, wie eine LED Funktioniert, würde ich 
nach wie vor raten, mit AVR Controllern anzufangen - weil sie einfacher 
sind. Aber erstmal die Finger von den Fuses lassen. Taktfrequenzen kann 
man bei den halbwegs aktuellen Modellen auch per Software ändern.

Mein erstes AVR Programm hatte ich mitsamt Installation der nötigen 
Entwicklungstools schon am ersten Abend am Laufen. Für das erste ARM 
Programm brauchte ich 3 Tage - trotz der Vorkenntnisse. Das sagt doch 
eigentlich schon alles. Entweder habe ich mich saublöde angestellt, oder 
ich habe Recht (das ARM viel Komplexer sind).

: Gesperrt durch Moderator
von PittyJ (Gast)


Lesenswert?

Ich habe ARMs von anderen Herstellern (TI, NXP).
Auf denen hatte auch innerhalb einer Stunde ein "Hallo Welt" laufen.

Da liegt es wohl eher an der mitgelieferten Entwicklungsumgebung, dass 
man 3 Tage braucht.
Warum hier alle auf STM stehen, kann ich nicht nachvollziehen. Ich fand 
deren Tools am kompliziertesten von allen bisher ausprobierten.

von STMler (Gast)


Lesenswert?

Stefan U. schrieb:
> Eigentlich mag ich dieses Thema nicht, weil es immer zu endlosen
> Diskussionen führt, die im Kreis laufen. Mangels Erfahrung, hatte ich
> mich dabei bisher weitgehend zurück gehalten.
>
> Aber jetzt möchte ich auch mal meinen Senf dazu geben, denn ich habe
> seit ein paar Tagen ein ARM Kit auf dem Tisch liegen und spiele damit
> herum.


Schade. Wäre besser gewesen, solchen Unsinn nicht zu schreiben.


> Als Hauptargument für ARM wird hier oft angegeben, daß man für gleiches
> Geld und Stromaufnahme viel mehr Leistung bekommen würde.


Wer behauptet das?


> Wenn ich von einem ATmega328P ausgehend auf einen STM32F103CB wechsele,
> dann bleibe ich ungefähr in der gleichen Preisklasse (jedenfalls was
> Endverbraucher die bei Conrad/Reichelt einkaufen angeht) und die
> Stromaufnahme ist ähnlich.


Ahja, Du vergleichst hier einen (mindestens) 64-Pinner mit komplexer 
Peripherie mit einem simplen AVR...


> Laut Marketing Geschwätz erhalte ich 72 Mhz, aber effektiv kommen da
> wegen der nötigen Waitstates nur 24 Mhz heraus - was kaum mehr ist, als
> meine geliebten AVR's können.


Erstens kann der mit 72MHz innerhalb der Spec betrieben werden, zum 
anderen hat der Controller Prefetchbuffer, die einiges abfangen.


> Natürlich gibt es auch viel größere ARM's, die wären dann allerdings
> nicht mehr wirklich mit AVR's zu vergleichen, da sie in jeder Hinsicht
> in einer anderen Liga spielen.


Tut der kleine STM32 auch schon.


> Ich muss schon zustimmen, dass man bei ARM Controllern etwas mehr fürs
> gleiche Geld bekommt. Aber es ist IMHO nicht so viel mehr, wie hier
> meistens gesagt wird.


Na dann schau mal die Doku an. Alleine der DMA ist den Sprung schon 
wert.
Display-Refresh oder ADC-Auslesen macht der STM ohne CPU-Beteiligung im 
Hintergrund, während der AVR mühsam nach Luft schnappt vor lauter 
Interrupts.


> ARM Architektur zu erlernen erscheint mir dennoch sinnvoll, eben weil
> man da mehr Luft nach oben hat. Wenn ich mit einem Atmega1284 nicht mehr
> auskomme, wird es eng. Bei ARM könnte ich relativ schmerzfrei den nächst
> größeren verwenden - bis in den Gigahertz und Gigabyte Bereich.


Das sind dann aber viele verschiedene Architekturen. ARM-M geht bisher 
nur bis 400MHz, darüber gibt es keine Mikrocontroller mehr, das sind 
dann die Cortex-A-Typen.


> Mein erstes AVR Programm hatte ich mitsamt Installation der nötigen
> Entwicklungstools schon am ersten Abend am Laufen. Für das erste ARM
> Programm brauchte ich 3 Tage - trotz der Vorkenntnisse. Das sagt doch
> eigentlich schon alles. Entweder habe ich mich saublöde angestellt, oder
> ich habe Recht (das ARM viel Komplexer sind).


Es ist Ersteres, glaub mir...

von STM-8-C-Anfänger (Gast)


Lesenswert?

Stefan U. schrieb:
> Aber jetzt möchte ich auch mal meinen Senf dazu geben, denn ich habe
> seit ein paar Tagen ein ARM Kit auf dem Tisch liegen und spiele damit
> herum.

Wie lange hast Du Dich zuvor mit den diversen AVRs beschäftigt?

Wieso maßt Du Dir also nach ein paar Tagen Spielerei mit einem STM32 
ein Urteil an?

von Jim M. (turboj)


Lesenswert?

Stefan U. schrieb:
> Dafür erhalte ich 4x soviel Flash Speicher. Aber meine Programme sind
> auch locker doppelt so groß.

Das gilt vielleicht für trivialste 8-Bit Programme. Sowohl AVR als auch 
ARMV7-M benutzen 16-bittige Instruktionen, letzteres kennt auch 
32-Bittige Instruktionen.

Bei 16- und 32- bittigen Berechnungen ist der Erwartungswert der 
Codegröße für den STM deutlich kleiner, da der AVR diese nicht mehr in 
einem Schritt abhandeln kann.

Bei trivialen Programmen zählt auch die Größe der LibC und der 
Intialisierungen, die sind bei STM und ARM-GCC(+newlib) deutlich größer 
als bei AVR. Dafür hat der STM aber mehr Flash eingebaut.

Stefan U. schrieb:
> Bei ARM könnte ich relativ schmerzfrei den nächst
> größeren verwenden - bis in den Gigahertz und Gigabyte Bereich.

Da müsstest Du aber i.d.R. die Plattform / den Hersteller wechseln. Das 
macht fast genausoviel Aua wie Wechsel von AVR zu ARM - nur der Core ist 
gleicht, die ganze angehängte Peripherie aber von Hersteller zu 
Hersteller total verschieden.

Stefan U. schrieb:
> Einsteigern, die gerade mal wissen, wie eine LED Funktioniert, würde ich
> nach wie vor raten, mit AVR Controllern anzufangen - weil sie einfacher
> sind.

LOL. Ich sage nur: Fuses.
Es gibt auch sehr einfache ARM, auf einem Nordicsemi NRF51 z.B. muss 
man zum LED Leuchten nur den GPIO auf Output und High (oder Low) setzen, 
fertich. Der ist in vielen Teilen einfacher als ein AVR aufgebaut IMHO.

Die hier im Forum oft erwähnten STM32 gehören aber zu den 
komplizierteren Varianten.

von Cortex (Gast)


Lesenswert?

Soviel Blödsinn an so einem schönen sonnigen Sonntag. :'(



> Einsteigern, die gerade mal wissen, wie eine LED Funktioniert, würde ich
> nach wie vor raten, mit AVR Controllern anzufangen - weil sie einfacher
> sind. Aber erstmal die Finger von den Fuses lassen. Taktfrequenzen kann
> man bei den halbwegs aktuellen Modellen auch per Software ändern.

Bitte nicht. Wenn man neu einsteigt, darf es ruhig s o t a sein. Heute 
also Cortex.

von ui (Gast)


Lesenswert?

Stefan U. schrieb:
> Dafür erhalte ich 4x soviel Flash Speicher. Aber meine Programme sind
> auch locker doppelt so groß.

Halt ich für ein Gerücht. Lass mich raten: Du hast den STMCube oder die 
Standard Peripheral Libray benutzt? Und gleichzeitig programmierst du 
den AVR mit den Standard IO Funktionen per Hand. Und dann mit einem 
einfachen Hallo Welt? Der Startup Code eines ARMs ist rießig im 
Vergleich zum AVR... Bei Hallo Welt zählt der Startup Code schon etwas 
mehr als bei einem wirklich komplexen Programm.

Arbeite mal an einem großen Projekt damit, dann wirst du's verstehen!

von Cortex (Gast)


Lesenswert?

Sorry guys, was bitte schön sind 8-Bit Programme?
Seit ihr schon wach und wieder nüchtern?

von ui (Gast)


Lesenswert?

STMler schrieb:
> nur bis 400MHz,

musste Schmunzeln. Habs mir nochmal durchgelesen. "Nur" bis 400MHz hehe.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan U. schrieb:
> Ich muss schon zustimmen, dass man bei ARM Controllern etwas mehr fürs
> gleiche Geld bekommt. Aber es ist IMHO nicht so viel mehr, wie hier
> meistens gesagt wird.

 O doch.
 Alleine schon DMA die man an fast alles dranhängen kann...
 Timer, mehrere I2C, mehrere SPI...
 Mehrere USART-Ports mit CAN, IrDa, LIN, SmartCard...


> Dafür erhalte ich 4x soviel Flash Speicher. Aber meine Programme sind
> auch locker doppelt so groß.

 Selbst wenn es stimmt - es ist immerhin doppelt so viel...
 Nur ist der ARM ein 32-bitter, da muss er ganz einfach bei normalen
 Programmen und Berechnungen kürzeren und schnelleren Code erzeugen.
 Und die benötigten Library Routinen werden selbstverständlich nur
 einmal geladen - danach ist es bloß ein Aufruf. Deswegen steht dein
 Vergleich (aber auch nur vielleicht) nur bei ganz kurzen und einfachen
 Programmen, bei komplexen Programmen und Berechnungen stimmt das
 nie und nimmer.


> Laut Marketing Geschwätz erhalte ich 72 Mhz, aber effektiv kommen da
> wegen der nötigen Waitstates nur 24 Mhz heraus - was kaum mehr ist, als
> meine geliebten AVR's können.

 Das stimmt schon mal nicht.

: Bearbeitet durch User
von Rudolph R. (rudolph)


Lesenswert?

PittyJ schrieb:
> Warum hier alle auf STM stehen, kann ich nicht nachvollziehen.

ST macht eben den größten Hype, bei allen anderen wie TI, NXP, Nordic 
etc gibt es lange nicht so viel geschenkt oder Eval-Boards zu Preisen 
als ob die den Händlern geschenkt werden würden.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Stefan U. schrieb:
> Laut Marketing Geschwätz erhalte ich 72 Mhz, aber effektiv kommen da
> wegen der nötigen Waitstates nur 24 Mhz heraus - was kaum mehr ist, als
> meine geliebten AVR's können.

Du kannst Code in den RAM auslagern, dann läuft der auch mit 72Mhz ohne 
Wait-States. Bzgl Rechenleistung man bei 8Bit vs 32Bit nicht diskutieren 
...

Stefan U. schrieb:
> Aber es ist IMHO nicht so viel mehr, wie hier
> meistens gesagt wird.

Schau dir alleine mal die Timer mit PWM an ... USB hat selbst ein F103 
schon.

Stefan U. schrieb:
> Aber jetzt möchte ich auch mal meinen Senf dazu geben, denn ich habe
> seit ein paar Tagen ein ARM Kit auf dem Tisch liegen und spiele damit
> herum.

Dann beschäftige dich noch etwas damit, bis du fundierte Kenntnisse 
hast.

Nach deiner Anfänger-Meinung hatte hier eigentlich niemand gefragt, 
weshalb ich mich über so einen Thread wundere ...

: Bearbeitet durch User
von Robin S. (der_r)


Lesenswert?

Wegen Speicherverbrauch:

Es ist so, dass der konstante Overhead größer ist als bei AVR (allein 
die Interruptvektoren). Sprich, bei sehr kleinen Programmen mag dein 
Vorwurf stimmen, dass das Programm doppelt so viel Flash belegt. Je 
größer dein Projekt wird, desto deutlicher lässt sich deine Theorie des 
doppelten Speicherbedarfs widerlegen: Es steigt nicht weiter mit Faktor 
2!

von Achim (Gast)


Lesenswert?

STMler schrieb:
> mit einem simplen AVR

Damit ist doch alles gesagt. AVR ist simpel. In jeder Beziehung. Und 
reicht doch für die große Mehrzahl an Projekten.

von chris (Gast)


Lesenswert?

Hier mal ein kleiner Benchmark zwischen Arduino-Uno und STM32F103:

Beitrag "Re: STM32 Arduino"

Es ergibt sich das selbe Bild wie schon früher: Der ARM ist ca. 4x 
schneller.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Naja, bei 72MHz zu 16MHz sollte schon 'ungefähr 4x so schnell' drin 
sein.

... weshalb halt alle Nase ein SUV vorbeigeschoben kommt, weil das Ding, 
mit einem Fiat Panda verglichen, halt auch viiieeel mehr Platz bietet 
und viel mehr Beschleunigung entwickeln kann - ok, dafür frisst der SUV 
halt ne Kleinigkeit mehr ... aber ist halt viiieeel mehr und toll und in 
Bunt ist Der auch.

MfG

PS: Äpfel und Birnen, aber immerhin, ein Vergleich.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Cortex schrieb:
> Sorry guys, was bitte schön sind 8-Bit Programme?

Programme für 8-Bit-Prozessoren wie den in Atmels AVR-Reihe verbauten 
Prozessorkern.

Auch wenn der Programmspeicher (das Flash) mit 16 Bit angesprochen wird, 
ist der AVR-Kern ein 8-Bit-Kern.

von Cortex (Gast)


Lesenswert?

Patrick J. schrieb:
> Hi
>
> Naja, bei 72MHz zu 16MHz sollte schon 'ungefähr 4x so schnell' drin
> sein.
>
> ... weshalb halt alle Nase ein SUV vorbeigeschoben kommt, weil das Ding,
> mit einem Fiat Panda verglichen, halt auch viiieeel mehr Platz bietet
> und viel mehr Beschleunigung entwickeln kann - ok, dafür frisst der SUV
> halt ne Kleinigkeit mehr ... aber ist halt viiieeel mehr und toll und in
> Bunt ist Der auch.
>
> MfG
>
> PS: Äpfel und Birnen, aber immerhin, ein Vergleich.

Der ARM verbraucht aber nicht mehr als AVR. Nix Äpfel mit Birnen, 
sondern schöner saftiger großer Cortex vs kleinem schrumpeligen AVR.

von Cortex (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Cortex schrieb:
> Sorry guys, was bitte schön sind 8-Bit Programme?
>
> Programme für 8-Bit-Prozessoren wie den in Atmels AVR-Reihe verbauten
> Prozessorkern.
>
> Auch wenn der Programmspeicher (das Flash) mit 16 Bit angesprochen wird,
> ist der AVR-Kern ein 8-Bit-Kern.

Hä? Das Programm wird nicht in 8-Bit geschrieben, sondern durch einen 
Compiler (oder ASM) für das Target übersetzt. Es ist also kein 8-Bit 
Prpgramm und bestimmt kein typisches.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Bei 4-facher Taktrate darf ich doch davon ausgehen, daß die 4-fache 
Menge an Befehlen durchgespult werden kann, trotz schrumpelig und so.

Soll mich aber auch eher weniger interessieren, wie die heutigen 
Schwanzprothesen aussehen ;)

Daß 32bit viel cooler als die 8bit sind, ist aber hier egal, oder?

MfG

von Cortex (Gast)


Lesenswert?

Nix Schwanzvergleich, nur Korrektur vom Eingangspost. Da schreibt einer 
Sch... und das muss nicht sein.

von Gerhard O. (gerhard_)


Lesenswert?

Mal sehen ob ich auf meiner von mir fallengelassenen Bananenschale 
selber ausrutsche;-)

Zum Thema passt sicherlich "Jedem Tierchen sein Pläsierchen"

Für reine Steueraufgaben ohne nennenswerte 
Fließkommarechnungsnotwendigkeit reichen die meisten 8-Bitter allemal.
Wenn allerdings viel gerechnet werden soll, finde ich, findet der ARM 
besser seine Daseinsberechtigung. Auch wenn TCP/IP gemacht werden muß 
sind gewisse ARM Modelle damit vorteilhafter hardwaremäßig.

Sonst ist es eigentlich wurscht. Alles was der 8-Bitter kann, kann auch 
der ARM. Ob jetzt die Ports 8-Bit breit sind oder 16-Bit, kann man in 
den meisten Fällen als Jacke mit Hose sein lassen.

An die Komplexität und Anwendung der Peripherien gewöhnt man sich.

War ich damals froh, daß der RTC Zähler beim F103 als 32-Bit Zähler 
ausgeführt war. Zeitabstände ließen sich damit unkompliziert messen. 
Mach das mit BCD Zeitformat der meisten RTCs. Auch der SYSTICK Timer ist 
sehr angenehm.

Was halt beim ARM angenehm ist, ist z.B. die Verfügbarkeit von DMA. Es 
ist doch angenehm wenn der ADC vollkommen im Hintergrund lebendige 
Meßwerte produziert.

Relativ zu typischen 8-Bittern sind auch bei keinen ARMs die FLASH und 
RAM Resourcen proportional. Auch wenn der Overhead etwas größer beim ARM 
ist, gleicht sich das später wieder aus. Ich sehe das eher locker.

Nichts auf der Welt ist perfekt. Trotzdem kann man viele Probleme 
erfolgreich lösen.

Obwohl ich immer noch gerne mit 8-Bittern herumspiele, zögere ich nicht 
einen ARM zu verwenden wenn es mir die Lösung des Problems erleichtert. 
In meinem Universum ist Platz für alle guten technischen Lösungen.

Wenn ich mich allerdings entscheiden müßte, dann fällt meine Wahl ohne 
überlegen zu müssen auf ARM.

Allerdings würde ich es gerne sehen wenn man mal mit den dokumentierten 
Errata aufräumen würde. Die haben ja wahre Erratabücher...


Schönen Sonntag noch!

: Bearbeitet durch User
von Hans-Georg L. (h-g-l)


Lesenswert?

Mampf F. schrieb:
> Stefan U. schrieb:
>> Laut Marketing Geschwätz erhalte ich 72 Mhz, aber effektiv kommen da
>> wegen der nötigen Waitstates nur 24 Mhz heraus - was kaum mehr ist, als
>> meine geliebten AVR's können.
>
> Du kannst Code in den RAM auslagern, dann läuft der auch mit 72Mhz ohne
> Wait-States. Bzgl Rechenleistung man bei 8Bit vs 32Bit nicht diskutieren
> ...
>

Flash kann man nicht beliebig schnell machen aber die Datenbreite 
erhöhen.

Dein AVR liest 8 Bit und der Arm mindestens 32 Bit gleichzeitig

Beim STM32F446 sind es sogar 128 Bit + Prefetch und Cachelines.

Das ist einfache eine andere Welt ...

von Jobst M. (jobstens-de)


Lesenswert?

Stefan U. schrieb:
> meine geliebten AVR's

Liebe macht blind.
Das wird es wohl sein ...


Gruß

Jobst

von Gerhard O. (gerhard_)


Lesenswert?

Mit einem F103 mußte ich mal ein Thermocouple (K,T,E,J) linearisieren. 
Ohne Tabellen schaffte der F103 mit Horner's Methode(9.Ordnung) in nur 
14us bei 36MHz (!) in Fließkommarechnungsformat. Mit einem 8-bitter tut 
man sich hier schon schwerer. In anderen Worten, beim ARM kann man sich 
auch solche Lösungen ohne Gewissensbisse erlauben. seitenweise Tabellen 
haben zu müssen, konnte ich jede benötigte Thermocouple Type nach NIST 
linearisieren.

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

Jobst M. schrieb:
> Stefan U. schrieb:
>> meine geliebten AVR's
>
> Liebe macht blind.
> Das wird es wohl sein ...
>
> Gruß
>
> Jobst

Warum sich entscheiden zu müssen?

Die Welt ist groß genug für alle!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Cortex schrieb:
> Hä? Das Programm wird nicht in 8-Bit geschrieben

Willst Du trollen?

von Gerhard O. (gerhard_)


Lesenswert?

Ich verstehe eigentlich nicht recht warum immer Striche in den Sand 
gezogen werden müssen.

Die Industrie offeriert uns heutzutage doch so vele 
Lösungsmöglichkeiten, sprich es gibt einen uC optimiert für nahezu jeden 
erdenkbaren Anwendungsbereich. Es gilt dann doch nur, sich genug zu 
informieren welche Lösung optimal für die jeweiligen Anforderungen ist 
und den Zugang zu den Entwicklungstools.

Mit den heutig gebräuchlichen uC Entwicklungssprachen sind die 
Unterschiede sowieso nicht mehr so gravierend und eher fließend sobald 
man mit dem Gebrauch der Peripherien vertraut ist. Abgesehen davon, gibt 
es genug Verpackungen (CUBE, CMIS, StdLIB) so man will.

Ich könnte mir als Hobbyist heutzutage keine bessere Zeit zum Spielen 
vorstellen. Nutzt es doch anstatt so oft so viel zu meckern;-)

Freut Euch über das was ihr schon habt. In den 80er Jahren war das eine 
ganz andere Geschichte. Alles mußte hart erarbeitet werden.

Duck und weg...

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Gerhard O. schrieb:
> Freut Euch über das was ihr schon habt. In den 80er Jahren war das eine
> ganz andere Geschichte. Alles mußte hart erarbeitet werden.

Sei froh, daß Du die 70er nicht mitmachen mußtest ;-)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Gerhard O. schrieb:
> Für reine Steueraufgaben ohne nennenswerte
> Fließkommarechnungsnotwendigkeit reichen die meisten 8-Bitter allemal.

Bei meinem letzten Projekt hab ich meine "Toolbox" um STM32F103 
erweitert - sonst fast nur AVR und manchmal FPGA (wenn es angebracht 
war)-, weil der Battery-Backed RTC und Backup-Register einfach ein super 
Feature sind :)

Alles andere hätte der AVR auch direkt können - ach wobei, ich wollte 
USB ja auch noch. Das geht zwar software-mäßig mit vUSB, aber wenn man 
Timer laufen hat (Dot-Matrix Multiplexing + IRMP), kriegt der vUSB 
massive Probleme.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich finde, das alle ihre Berechtigung haben. Als Versuch habe ich damals 
ein mittel-komplexes Projekt mal mit Mega, XMega und STM32F100 aufgebaut 
und dabei deren Peripherie, soweit sie das Projekt betraf, voll 
ausgenutzt. Beim Mega also alles zu Fuss, beim XMega die AWEX Unit und 
beim STM32 den Advanced Timer, um die BLDC Steuerung zu realisieren.

Der Löwenanteil der Software wurde zuerst auf dem Mega gemacht und dann 
auf die grösseren MC portiert und angepasst. Alle haben den Job erfüllt, 
es gab keinen klaren Sieger, allerdings war der kleine Mega fast 100% 
beschäftigt und der XMega war recht teuer.

Das einzige, was wirklich ein Hindernis war, war die Suche nach einer 
vernünftigen IDE für den STM32. Da lief am besten Atollic, bevor sie 
dann Geld haben wollten, Eclipse war ein Monster, das auf meinem 
Quadcore extrem träge war, EM:Bits(?) wollte nicht, Coocox gibts nicht 
mehr. D.h, das ich vermutlich, wenn ich es wieder brauche, zurück zu 
Atollic gehen werde oder mit dem alten Coocox 1.7 weitermache.

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

m.n. schrieb:
> Gerhard O. schrieb:
>> Freut Euch über das was ihr schon habt. In den 80er Jahren war das eine
>> ganz andere Geschichte. Alles mußte hart erarbeitet werden.
>
> Sei froh, daß Du die 70er nicht mitmachen mußtest ;-)

Das hätte vielleicht einen falschen Eindruck gegeben...

von Gerhard O. (gerhard_)


Lesenswert?

Matthias S. schrieb:
> ?.. Da lief am besten Atollic, bevor sie
> dann Geld haben wollten, Eclipse war ein Monster, das auf meinem
> Quadcore extrem träge war, EM:Bits(?) wollte nicht, Coocox gibts nicht
> mehr. D.h, das ich vermutlich, wenn ich es wieder brauche, zurück zu
> Atollic gehen werde oder mit dem alten Coocox 1.7 weitermache.

Atollic ist wieder frei, als LITE Version ohne Code Size Einschränkungen 
zu haben, erhältlich. Versuch's mal wieder.

von PittyJ (Gast)


Lesenswert?

Noch mal zur Geschwindigkeit: mein TI-ARM ist ein Keystone 2:
- 4 Kerne mit 1.4 GHz
- USB-3
- 10 GBit Ethernet
Alles das brauche ich auch bei den Videoanwendungen. Mit einem AVR würde 
ich da nicht weit kommen.

Es gibt also nicht 'Den ARM' und die STMs sind mehr Low-End. So wie ein 
8086 zur Core-I7 Linie.

von Christopher J. (christopher_j23)


Lesenswert?

Stefan U. schrieb:
> Mein erstes AVR Programm hatte ich mitsamt Installation der nötigen
> Entwicklungstools schon am ersten Abend am Laufen. Für das erste ARM
> Programm brauchte ich 3 Tage - trotz der Vorkenntnisse. Das sagt doch
> eigentlich schon alles. Entweder habe ich mich saublöde angestellt, oder
> ich habe Recht (das ARM viel Komplexer sind).

Die Frage ist doch auf was für Hilfestellungen du zurückgreifen 
konntest. Wenn ich auf dieser Seite mal den Artikel 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial mit dem 
Artikel 
https://www.mikrocontroller.net/articles/STM32_f%C3%BCr_Einsteiger 
vergleiche, dann würde ich wohl auch eher mit einem AVR anfangen wollen. 
Auf der einen Seite eine wirklich erstklassige Einführung in den AVR, 
mit selbst für Anfänger verständlichen Erklärungen wie man Register 
benutzt, wofür Interrupts gut sind und mit Links zu weiterführenden 
Themen wie UART, Timern, usw.
Auf der anderen Seite (STM32 für Einsteiger) bekomme ich in der ersten 
Tabelle die Information wie viele Hardware-Breakpoints ein PIC18 hat, in 
der zweiten Tabelle die Information das ich einen AVR mit Arduino-IDE 
unter Windows, Linux und MacOS programmieren kann und im Abschnitt 
"Übersicht CPU-Funktionalitäten" folgt ein Blockdiagramm von einem 
MSP430FR5739 neben dem Bild eines MSP430 Development Boards. Im 
Hauptartikel "STM 32" gibt es neben der Auflistung von IDEs und 
Libraries (welche jeweils zum Teil nicht mehr weiterentwickelt werden) 
noch eine Auflistung der Vorteile der Cortex-M gegenüber ARM7 und die 
Information das ein LPC1100 ab 0,65$ verfügbar ist. Der Hauptartikel 
über ARM hat die selben Probleme. Das beste daran ist wohl der Hinweis, 
auf "The Definitive Guide to ARM Cortex M3", wobei nicht jeder Anfänger 
geneigt ist für einen dicken Schinken 42€ auszugeben bzw. nicht jeder 
Zugang zum Online-Portal von Elsevier hat und man außerdem auch 
eigentlich keine 800 Seiten durchlesen müsste um an die Information zu 
kommen, dass jeder Cortex-M im Flash als erstes Wort den Stack-Pointer 
und als zweites Wort den Reset-Vector erwartet und ab da dann mit der 
internen Clock (noch ohne irgendwelche PLL-Konfiguration) ab dem 
Reset-Handler loswerkelt und Befehle abarbeitet.

Kurzum, was diesem Forum fehlt ist ein vernünftiges ARM-Tutorial, wo 
ganz allgemeine Dinge drin stehen, z.B. wie man ohne irgendeine IDE 
und egal unter welchem OS ein lauffähiges Programm erstellt, wofür der 
Startup-Code gut ist und warum man ein Linker-Script benötigt. Man muss 
das Linker-Script ja nicht einmal selber schreiben, nur wissen warum man 
es braucht und das es mit dem Startup-Code eng verbandelt ist. Außerdem 
noch wie man dieses Programm dann mittels irgendeinem GDB-Server 
(OpenOCD, JLink, etc.) und irgendeinem Hardware-Debugger (ST-Link, 
JLink, etc.) auf seinen Controller bekommt (ebenfalls ohne IDE). Das 
grundsätzliche Prozedere ist doch bei allen Cortexen gleich und wenn man 
einen kennt, kennt man alle.

Darauf aufbauend kann man sich dann mit der eigentlichen Hardware 
beschäftigen. Ob das dann ein STM32, NRF51 oder ein LPC wird muss dann 
jeder für sich selber wissen bzw. nach seinen Anforderungen oder 
Neigungen entscheiden. Für ein einfaches Blinky sollte jedenfalls 
jeweils der CMSIS-Header und ein kurzer Blick ins Handbuch reichen. Wer 
möchte kann natürlich auch irgendwelche Libraries nutzen. Vom Ansatz her 
gefällt mir das im Beitrag "Artikel LPC-Tutorial: Kritik und Anregungen" erwähnte 
LPC-Tutorial sehr gut und ich werde mal versuchen den Autor zu 
kontaktieren damit man eventuell gemeinsam so etwas entwickeln kann. 
Grundlagen für Cortex-M gleich und darauf aufbauend Tutorials über die 
spezifische Hardware von LPC, STM32, usw.

Es gab mal eine Zeit da war es wirklich schwierig allein eine 
funktionierende Toolchain für einen ARM zu bekommen. Die Zeiten sind 
jedoch glücklicherweise vorbei und man kann sich für jedes OS einen 
funktionierenden GCC bei https://launchpad.net/gcc-arm-embedded 
herunterladen. OpenOCD kennt so gut wie jeden Hardware-Debugger und 
falls nicht gibt es ja noch den J-Link und in der EDU-Version echt 
bezahlbar. Das waren mal wirkliche Hürden für einen Einstieg in ARM. Das 
was es heute (meiner Meinung nach) so unglaublich kompliziert macht ist 
der unglaubliche Wust an IDEs und Libraries. Die meisten Leute sehen da 
(verständlicherweise) den Wald vor lauter Bäumen nicht mehr. Bei dem 
AVR-GCC-Tutorial hingegen hat man sich noch auf das wesentliche 
konzentriert, weshalb der AVR deutlich weniger komplex erscheint. Ja, 
man muss bei den STM32 zusätzlich jeden Pin erstmal konkret als Ausgang 
konfigurieren damit eine LED zuckt und ja, dass Reference Manual ist 
viel Umfangreicher als bei einem ATMega aber man sollte sich von der 
Anzahl der Möglichkeiten nicht abschrecken lassen. Man muss ja nicht 
alles nutzen. Die Möglichkeiten zu haben finde ich dagegen sehr nett und 
auch wenn es vielleicht insgesamt einen ticken komplizierter sein sollte 
ist es der Zugewinn an Möglichkeiten allemal wert.

Stefan U. schrieb:
> Ich muss schon zustimmen, dass man bei ARM Controllern etwas mehr fürs
> gleiche Geld bekommt. Aber es ist IMHO nicht so viel mehr, wie hier
> meistens gesagt wird.

Neben dem bereits erwähnten DMA finde ich z.B. die Möglichkeit ohne 
großes Brimborium debuggen zu können schon durchaus einen echten 
Mehrwert und eine FPU kann durchaus auch sehr wertvoll sein. Stellt man 
seinen Code von Festkomma auf Gleitkommaarithmetik um wird der eventuell 
viel einfacher, auch wenn die Hardware vielleicht etwas komplexer wird.

von Joachim (Gast)


Lesenswert?

Wenn ich dieses Thread sehe, dann komme mir der Gedanke, dass hier jeden 
Tag der 1. April ist - außer gestern natürlich.

von Stefan F. (Gast)


Lesenswert?

Wie ich sehe, ist der übliche emotionsgeladene Sturm wieder 
ausgebrochen.
Das hat schon fast religiöse Züge hier. Aber was meckere ich, ich hatte 
es ja erwartet. Ihr dürft mich jetzt Troll nennen, ich hätte meine 
Klappe halten sollen.

> Da liegt es wohl eher an der mitgelieferten
> Entwicklungsumgebung, dass man 3 Tage braucht.

Nein, eher daran, dass ich mir die falschen Tutorials herausgesucht 
habe. Die SW4STM32 IDE funktionierte out-of-the Box. Die wollte ich aber 
anfangs nicht verwenden, weil sie nur STM32 unterstützt und mit einem 
Registrierungs-Zwang verbunden ist.

Aber ich verwende sie jetzt doch. Sie basiert auf dem gcc, der ja auch 
alle (?) anderen ARM Controller unterstützt. Und mit dem gcc bin ich 
schon lange vertraut. Eclipse ist nicht mein Favorit, aber ich kann mich 
mit ihr auch anfreunden.

Jedenfalls ging ein Tag schon auf Vergleich und Auswahl der Software.

> Du vergleichst hier einen (mindestens) 64-Pinner mit
> komplexer Peripherie mit einem simplen AVR.

Ich vergleiche einen 48 Pin ARM mit einem 32 Pin AVR. Beide gibt es auch 
in größer, das ist mir bewusst.

> zum anderen hat der Controller Prefetchbuffer, die einiges abfangen.

Ich habe noch nicht herausgefunden, welche Programme/Befehle von dem 
Buffer profitieren.  Mein erster LED Blinker läuft jedenfalls effektiv 
nur mit 24Mhz, obwohl der Systemtakt 72Mhz ist und die Buffer aktiviert 
sind. Ich vermute, dass es auf die konkreten Operationen ankommt, die 
man verwendet.

> Alleine der DMA ist den Sprung schon wert.

Das ist für mich auf jeden Fall ein interessantes Thema. Meine letzte 
Erfahrung mit DMA stammt aus den 90er Jahren, als ich Soundkarten und 
Disketten-Controller unter DOS programmierte. Bei µC ist mir der Nutzen 
noch nicht so klar, aber das wird sicher kommen, sobald ich es mal 
ausprobiere.

Deswegen beschäftige ich mich ja jetzt mit ARM, obwohl ich keine 
konkrete Anwendung habe. Ich will lernen, was die tolles können.

>> Entweder habe ich mich saublöde angestellt, oder
>> ich habe Recht (das ARM viel Komplexer sind).
> Es ist Ersteres, glaub mir...

Mag sein. Mein LED Blinkprogramm enthält auf dem ARM jedenfalls nur 
wenige Zeilen mehr als bei AVR (weil ich keinen delay_ms() Befehl 
gefunden habe. Aber egal, in ernsthaften Anwendungen sind solche Delays 
ohnehin nur sehr begrenzt nützlich.

> Wie lange hast Du Dich zuvor mit den diversen AVRs beschäftigt?

Ca 10 Jahre.

> Wieso maßt Du Dir also nach ein paar Tagen Spielerei mit einem STM32
> ein Urteil an?

Hmm, das sollte kein Urteil sein. Ich wollte nur meine Meinung als 
Anfänger kundtun. Mir kommen sie komplizierter vor. Andere Meinungen 
sind ebenfalls willkommen.

> Bei trivialen Programmen zählt auch die Größe der LibC und der
> Intialisierungen

Die habe ich nicht mitgezählt. ich habe sogar ins Assembler Listing 
geschaut.

> LOL. Ich sage nur: Fuses.

Ja schön, die habe ich auch als Knackpunkt genannt. Allerdings kann ich 
Dich beruhigen, ich habe in 10 Jahren nur zwei Chips verfused. Aus 
Fehlern lernt man.

> auf einem Nordicsemi NRF51 z.B. muss man zum LED Leuchten nur
> den GPIO auf Output und High (oder Low) setzen, fertich.

Das ist bei STM32F1 nicht anders.

>> Aber meine Programme sind auch locker doppelt so groß.
> Lass mich raten: Du hast den STMCube oder die
> Standard Peripheral Libray benutzt?

Nein, ich bin zwar noch Anfänger in Sachen STM32, aber so blöde nun doch 
nicht. Ich habe ein Programm dass nur Definitionen verwendet verglichen. 
Keine HAL, keine Library. Und die Größe der Initialisierungsroutine habe 
ich nicht mitgezählt.

> Arbeite mal an einem großen Projekt damit,
> dann wirst du's verstehen!

Mach ich.

>> Laut Marketing Geschwätz erhalte ich 72 Mhz, aber effektiv kommen da
>> wegen der nötigen Waitstates nur 24 Mhz heraus - was kaum mehr ist, als
>> meine geliebten AVR's können.

> Das stimmt schon mal nicht.

Was sagst du zu folgender Schleife?:
1
for (uint32_t j=0; j<6000000; j++)
2
{
3
    asm volatile ("nop");
4
}
Bei 8Mhz dauert diese Schleife 3 Sekunden. Bie 64Mhz dauert sie 1 
Sekunde. Also läuft dieser Programmteil nur 3x schneller, obwohl die 
Taktfrequenz 8x so hoch ist.

> du kannst Code in den RAM auslagern, dann läuft der
> auch mit 72Mhz ohne Wait-States.

Vielen Dank für diesen hilfreichen Tip!

> Hier mal ein kleiner Benchmark

Sorry, aber Benchmarks sind nur hilfreich, wenn sie dem konkreten 
Anwendungsfall entsprechen. Zu meiner delay Schleife passt er jedenfalls 
nicht.

> ok, dafür frisst der SUV halt ne Kleinigkeit mehr

Ich hatte die Stromaufnahme vom ATmega328P mit dem STM32F103RB 
verglichen. Der scheint bei gleicher Taktfrequenz nicht nennenswert mehr 
zu "fressen".

> Äpfel und Birnen, aber immerhin, ein Vergleich.

Genau. Beide Früchte sind Ok.

> Bei 4-facher Taktrate darf ich doch davon ausgehen, daß die 4-fache
> Menge an Befehlen durchgespult werden kann, trotz schrumpelig und so.

Willkommen im Club der irregeführten. Dem ist nämlich nicht so, weil der 
Flash Speicher maximal 24Mhz schafft (jedenfalls beim STM32F1).

> Daß 32bit viel cooler als die 8bit sind, ist aber hier egal, oder?

Das ist mir wirklich völlig egal. Denn auch meine ollen AVR's können in
C alle Operationen bis 64bit wie vom PC gewohnt ausführen. Es dauert 
dann halt ein paar Takte mehr.

> Korrektur vom Eingangspost. Da schreibt einer
> Sch... und das muss nicht sein.

Du hast Recht, falsche Annahmen sollte man korrigieren. Deswegen mag ich 
dieses Forum hier ja auch. Hier lässt man niemanden dumm sterben.

> Dein AVR liest 8 Bit und der Arm mindestens 32 Bit gleichzeitig

AVR's lesen 16bit Gleichzeitig, aber egal, deine Aussage bleibt trotzdem 
richtig.

> Eclipse war ein Monster, das auf meinem Quadcore extrem träge war

Mein letzter Laptop war ein Dual-Core Pentium M 1,3Ghz. Der reichte für 
alle Sachen prima aus, nur nicht für größere Eclipse Prohekte in Java. 
Jetzt habe ich einen neuenQuad Core, der schafft das. Das ist übrigens 
einer der Gründe, weswegen ich zuerst Netbeans versucht habe. Aber da 
habe ich weiderholt den Debugger nicht als Laufen bekommen. An nder 
Kommandozeile lief er, aber in der IDE nicht. Das selbe Problem hatte 
ich schon vor ein paar Jahren mit AVR's.

Die Eclipse basierte Umgebung SW4STM32 hatte jedoch gleich auf Anhieb 
funktioniert. So ungerne ich Eclipse verwende und eine IDE, die nur 
STM32 kann - das ist dennoch ein dickes Plus. Wenn ich aus dem Anfänger 
Stadium heraus bin, werde ich es nochmal mit Netbeans versuchen.

von Cortex (Gast)


Lesenswert?

Stefan U. schrieb:
> Nein, eher daran, dass ich mir die falschen Tutorials herausgesucht
> habe. Die SW4STM32 IDE funktionierte out-of-the Box. Die wollte ich aber
> anfangs nicht verwenden, weil sie nur STM32 unterstützt und mit einem
> Registrierungs-Zwang verbunden ist.

Genau, da du dich mit avr studio nicht bindest und den avr jeden 
x-beliebigen Herstellers programmieren kannst. :-(

Stefan U. schrieb:
> Ihr dürft mich jetzt Troll nennen

Ja, du bist ein Troll!

von Cortex (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Willst Du trollen?

Lies deinen Beitrag noch einmal. Wer von uns ist wohl hier der Troll?

von Cortex (Gast)


Lesenswert?

Gerhard O. schrieb:
> Für reine Steueraufgaben ohne nennenswerte
> Fließkommarechnungsnotwendigkeit reichen die meisten 8-Bitter allemal.

Reichen ja, aber warum den 10 Jahre alten Polo nehmen, wenn es fürs 
gleiche Geld einen neuen Passat gibt. Mehr Komfort, mehr Leistung bei 
gleichem Verbrauch. Warum willst du dich selbst quälen? ;-)

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


Lesenswert?

Gerhard O. schrieb:
> zurück zu
>> Atollic gehen werde oder mit dem alten Coocox 1.7 weitermache.
>
> Atollic ist wieder frei

Ja, deswegen hatte ich auch überlegt, dann wieder zurück zu Atollic zu 
gehen, war damals angenehm, man musste nur einen Stub (wimre war das die 
ELF->HEX Umwandlung) durch was richtiges ersetzen, dann klappte alles.
Allerdings ist man dann erstmal wieder auf STM32 begrenzt und die Betty 
mit ihrem alten LPC2200 bleibt aussen vor. Aber das ist nicht tragisch.

von Gerhard O. (gerhard_)


Lesenswert?

Cortex schrieb:
> Gerhard O. schrieb:
>> Für reine Steueraufgaben ohne nennenswerte
>> Fließkommarechnungsnotwendigkeit reichen die meisten 8-Bitter allemal.
>
> Reichen ja, aber warum den 10 Jahre alten Polo nehmen, wenn es fürs
> gleiche Geld einen neuen Passat gibt. Mehr Komfort, mehr Leistung bei
> gleichem Verbrauch. Warum willst du dich selbst quälen? ;-)

Kommt auf die Umstände an. In der Firma nehmen wir für die meisten 
Steueraufgaben nur noch ARM/CORTEX. Wenn man effizient sein will, ist es 
besser einen uC wirklich gut zu kennen anstatt Vieles nur mittelmäßig. 
Wenn man einen ARM gut kennt kommt man auch mit den Paralleltypen gut 
zurecht. Das Debuggen ist mit JTAG viel besser und geht schneller.

Im Hobbybereich verwende ich immer noch gerne 8-Bitter:

weil ich gerne damit arbeite
weil ich vielen alten Code wiederverwenden kann und viele Projekte somit 
in kürzester Zeit aus dem Boden gestampft werden können weil vieles 
schon Jahre an Zuverlässigkeit bewiesen hat.
weil meine Bastelkiste noch voll mit AVRs,PICs, AT89LP51 ist.
weil ich gerne meine eigenen Platinen fertige und dann lieber mit THT 
arbeite
weil ich manchmal lieber mit 5V arbeiten will
weil ich mit den Tools gut zurechtkomme

Ist halt Geschmackssache.

Neuere Selbstbauprojekte mache ich heutzutage, wenn angebracht, auch mit 
ARM. Speziell, wenn viel Rechenarbeit angesagt ist, da tut man sich mit 
32-bit viel weniger an.

von Cortex (Gast)


Lesenswert?

@Gerhard O.
Im ersten Post gibg es mal wieder darum, Einsteigern  den ARM madig zu 
machen. Unter dem Gesichtspunkt betrachte ich deinen post.

Gerhard O. schrieb:
> weil ich gerne damit arbeite
das hilft dem Einsteiger aber sehr. ;-(
> weil ich vielen alten Code wiederverwenden kann und viele Projekte somit
> in kürzester Zeit aus dem Boden gestampft werden können weil vieles
> schon Jahre an Zuverlässigkeit bewiesen hat.
auch wichtig für Einsteiger. ;-(
> weil meine Bastelkiste noch voll mit AVRs,PICs, AT89LP51 ist.
der Einsteiger hat eine leere Kiste. ;-(
> weil ich gerne meine eigenen Platinen fertige und dann lieber mit THT
> arbeite
ich, ich, ich, ... und wo bleibt der Einsteiger? ;-(
> weil ich manchmal lieber mit 5V arbeiten will
du machst bestimmt noch andere Dinge gern, die andere aber ablehnen. ;-)
> weil ich mit den Tools gut zurechtkomme
mit meinem C64 kam ich auch sehr gut zurecht, nutze ich ihn heute noch? 
;-(

von Harry L. (mysth)


Lesenswert?

Stefan U. schrieb:
> So ungerne ich Eclipse verwende und eine IDE, die nur
> STM32 kann

Stimmt so nicht.
Man kann SW4STM genau wie jedes Plugin in Eclipse zusätzlich 
installieren.
Ich nutz mein Eclipse für AVR, RPi, STM32, Linux, php, bash.....etc.

von Pete (Gast)


Lesenswert?

An dem Punkt wo du 3 Tage für das erste Programm brauchst war doch schon 
alles gelaufen, entweder ist das ST Zeugs totaler Müll oder du hast 
gerade dein 2tes Programm geschrieben.

Ich persönlich nehme für kleine Sachen das TIVA C Series Launchpad, 
kostet 12€ hat en Debugger darauf und hat einfach gute Librarys und jede 
Menge Beispiel Programme an Board.

Beitrag #4960755 wurde vom Autor gelöscht.
von Stefan F. (Gast)


Lesenswert?

> Genau, da du dich mit avr studio nicht bindest

Ich habe nicht geschrieben, dass ich AVR Studio verwende. Tue ich 
übrigens auch nicht.

von Mampf (Gast)


Lesenswert?

PittyJ schrieb:
> Warum hier alle auf STM stehen, kann ich nicht nachvollziehen. Ich fand
> deren Tools am kompliziertesten von allen bisher ausprobierten.

Ja, auch andere haben schöne 32-Bit-Controller. Wie Atmel, Microchip, 
NXP, Freescale (schon wieder NXP), Silabs, Cypress.

Warum sich alle ausgerechnet zwanghaft den STM32 antun, ist mir so auch 
nicht eingängig. Das ist wieder mal Hype und sonst nichts. Für mich sind 
die Peripheral-Lib oder Cube-MX ein KO-Kriterium für die STM32.

von Markus (Gast)


Lesenswert?

> Warum sich alle ausgerechnet zwanghaft den STM32 antun,

Man bekommt sie so billig:
http://www.ebay.com/itm/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-Arduino-/201529768817

von Mampf (Gast)


Lesenswert?

Markus schrieb:
>> Warum sich alle ausgerechnet zwanghaft den STM32 antun,
>
> Man bekommt sie so billig:
> Ebay-Artikel Nr. 201529768817

So teuer sind die anderen auch nicht:
http://www.ebay.de/itm/CYPRESS-CY8CKIT-145-40XX-PSoC-4000S-Prototyping-Kit-/182492911882?hash=item2a7d6cd90a:g:cLcAAOSw4A5Yy-jv

http://www.ebay.de/itm/NXP-LPC1343-QuickStart-Board-Embedded-Artists-Art-No-EA-QSB-012-Cortex-M3-/292074161488?hash=item4400fa0550:g:nxoAAOSw7s5XhM5B

Wer um 10€ zu sparen mit CubeMX herumtut, der tut mir leid. Für den 
Preis eines Mittagessens quäle ich mich nicht Jahrelang mit Cube-MX 
herum.
Wer es trotzdem tut, hat keinerlei Wertschätzung für seine eigene 
Arbeitszeit...

von Stefan F. (Gast)


Lesenswert?

> Warum sich alle ausgerechnet zwanghaft den STM32 antun

Ich tue es mir freiwillig an, weil

a) die Evaluation Kits mitsamt Debugger sehr preisgünstig sind
b) ich die Chips als Endverbraucher bei Conrad und Reichelt kaufen kann
c) ich einige STM Controller auf Breakout Board kaufen kann (für 
Steckbrett und Lochraster)

Sicher gibt es auch andere Controller, die diese Anforderungen erfüllen. 
Zu STM32 habe ich schneller Infos und Empfehlungen gefunden, deswegen 
maxchen die nun bei mir das Rennen.

Irgendwo hat jeder Controller seine Macken oder ungünstiges Design. Es 
steht Dir frei, deinen eige Markus-Architektur zu entwicklen. Bis dahin 
nehme ich, was schon verfügbar ist.

> Wer um 10€ zu sparen mit CubeMX herumtut, der tut mir leid.

STM32 kann man auch ohne CubeMX benutzen, und das ist nicht einmal 
sonderlich schwierig, nachdem man das mittelmäßig komplexe CLOCK System 
verstanden hat.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Mampf schrieb:
> Das ist wieder mal Hype und sonst nichts. Für mich sind
> die Peripheral-Lib oder Cube-MX ein KO-Kriterium für die STM32.

Ja, finde ich auch ... Aber ich verwende gerne irgendwas, das /alle 
anderen/ auch verwenden, da ist dann der Support einfacher^^

von Stefan F. (Gast)


Lesenswert?

> Für mich sind die Peripheral-Lib oder Cube-MX
> ein KO-Kriterium für die STM32.

Du musst sie ja nicht benutzen, so wie du bei AVR auf Arduino verzichten 
darfst.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Oh wieder mal eine ARM/AVR Diskussion. Da muss ich auch gleich noch 
meinen Senf dazu geben...


Senf!

von Mampf (Gast)


Lesenswert?

Stefan U. schrieb:
>> Für mich sind die Peripheral-Lib oder Cube-MX
>> ein KO-Kriterium für die STM32.
>
> Du musst sie ja nicht benutzen, so wie du bei AVR auf Arduino verzichten
> darfst.

Man kann die STM32 bare-metal programmieren, stimmt.
Dazu wie geschaffen sind sie aber nicht wirklich.

Spätestens wenn man I2C mit DMA, Ethernet oder USB braucht, macht das 
keinen Spass mehr.

Die Sache mit Cube und der Peripheral Lib ist FÜR MICH ein KO, das heißt 
nicht, dass andere das nicht anders sehen dürfen :-)

Ist aber Offtopic. Ich wollte ohnehin nur drauf hinweisen, dass es viel 
schönere Bastelprozessoren gibt als STM32. Beispielsweise die PSOCs, die 
so schön flexibel sind.

von Bernd K. (prof7bit)


Lesenswert?

Mampf schrieb:
> Warum sich alle ausgerechnet zwanghaft den STM32 antun, ist mir so auch
> nicht eingängig.

Die "Maker"-Karawane ist weitergezogen, STM32 ist jezt der neue ATmega8, 
Cube/HAL ist das neue Arduino.

von m.n. (Gast)


Lesenswert?

Markus M. schrieb:
> Oh wieder mal eine ARM/AVR Diskussion. Da muss ich auch gleich noch
> meinen Senf dazu geben...
>
> Senf!

Viel zu teuer! Der muß aus China kommen und darf höchstens 5 ct das Glas 
kosten.

Für den Start mit einem neuen µC hole ich mir zumeist eine 
Kickstart-Version von IAR. Da hat man für diverse µCs immer die gleiche 
IDE. Die Code-Beschänkung der Demoversion stört dabei überhaupt nicht. 
Damit kann man schon Einiges machen.

Der Start ist sehr einfach und z.B. die Funktion "live-watch" beim ARM 
sorgt für hohe Transparenz beim Kennenlernen.

von Achim (Gast)


Lesenswert?

Christopher J. schrieb:
> Neben dem bereits erwähnten DMA

Dazu wäre noch zu erwähnen, daß DMA durchaus kein ARM-Privileg ist 
(haben die AVR-Xmegas auch). Als großen Vorteil der vielen einfachen 
AVRs wiederum empfinde ich ihre bis 5V Tauglichkeit. Damit ist man doch 
gleich um Welten flexibler (ja ich weiß, gibts vereinzelt bei ARM auch).

von Stefan F. (Gast)


Lesenswert?

Um Irritation zu vermeiden: Xmega vertragen maximal 3,6V VCC und auch an 
den I/O Pins.

Beitrag #4960928 wurde von einem Moderator gelöscht.
von Bernd K. (prof7bit)


Lesenswert?

Lars schrieb im Beitrag #4960928:
> Naja eine ganze Stunde schon für ein simples "Hallo Welt" ist jetzt
> keine Empfehlung.
>
> Sich als Anfänger [...]

Wie lange braucht ein Anfänger auf einem AVR für ein "Hallo Welt"?
1
AVR:
2
<------------ ausreichend C lernen, Tools, IDE, Debugger -------------><- µC generell verstehen -><- AVR verstehen ->
3
ARM:
4
<------------ ausreichend C lernen, Tools, IDE, Debugger -------------><- µC generell verstehen -><------ ARM verstehen ------>
Ich seh da jetzt nicht so den dramatischen Unterschied.

Beitrag #4960968 wurde von einem Moderator gelöscht.
Beitrag #4960978 wurde von einem Moderator gelöscht.
von (prx) A. K. (prx)


Lesenswert?

Stefan U. schrieb:
> Also läuft dieser Programmteil nur 3x schneller, obwohl die
> Taktfrequenz 8x so hoch ist.

Das zeigt nur, dass in der eingerichteten Konfiguration der AVR relativ 
zu seiner Taktfrequenz schneller springt, weil er langsamer taktet.

Da die STM32F1xx bei Flash-Zugriffen zwar einfaches Prefetching 
durchführen, aber kein Caching, hängt das direkt mit den Waitstates vom 
Flash zusammen. Takte den STM32 soweit runter, bis er keine Waitstates 
mehr benötigt, und er wird pro Takt schneller. ;-)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Ich seh da jetzt nicht so den dramatischen Unterschied.

Mehr Lesestoff, und ich hatte mehr Zeitaufwand bei der Auswahl der 
Arbeitsmittel (Software).

Das C Programm ist quasi identisch, da stime ich Dir zu.

> einfaches Prefetching durchführen, aber kein Caching,
> hängt das direkt mit den Waitstates vom Flash zusammen.

Das habe ich an dieser delay Schleife auch erkannt. Das Prefetching ist 
an dieser Stelle vollkommen nutzlos. An anderen Stellen wird es helfen, 
sonst hätte man dieses Feature nicht eingebaut.

von Axel S. (a-za-z0-9)


Lesenswert?

Mampf schrieb:
> Stefan U. schrieb:
>>> Für mich sind die Peripheral-Lib oder Cube-MX
>>> ein KO-Kriterium für die STM32.
>>
>> Du musst sie ja nicht benutzen, so wie du bei AVR auf Arduino verzichten
>> darfst.
>
> Man kann die STM32 bare-metal programmieren, stimmt.
> Dazu wie geschaffen sind sie aber nicht wirklich.

Diese Aussage ergibt überhaupt keinen Sinn. Wie sollte deiner Meinung 
nach ein µC denn aussehen, um "wirklich dafür geschaffen zu sein" 
bare-matal programmiert zu werden?

> Spätestens wenn man I2C mit DMA, Ethernet oder USB braucht, macht das
> keinen Spass mehr.

Auch das ist Unsinn. Was man will, ist Abstraktion. Daß ST es nicht 
hinbekommt, benutzbare Abstraktionslayer für ihre Chips auszuliefern, 
heißt ja nicht daß es niemand hinbekommt. Und ganz besonders heißt das 
nicht, daß du keinen dir genehmen Abstraktionslayer bauen könntest.

> Die Sache mit Cube und der Peripheral Lib ist FÜR MICH ein KO

Es gibt 3rd Party Abstraktionslayer, die nicht nur schöner als SPL und 
HAL sind, sondern sogar plattformübergreifend funktionieren. Ich mag 
bspw. libopencm3.

Beitrag #4961021 wurde von einem Moderator gelöscht.
von (prx) A. K. (prx)


Lesenswert?

Stefan U. schrieb:
>> Bei 4-facher Taktrate darf ich doch davon ausgehen, daß die 4-fache
>> Menge an Befehlen durchgespult werden kann, trotz schrumpelig und so.
>
> Willkommen im Club der irregeführten. Dem ist nämlich nicht so, weil der
> Flash Speicher maximal 24Mhz schafft (jedenfalls beim STM32F1).

Das Flash-Interface der STM32F1 ist sehr einfach und schmalbandig 
gestrickt, Flash-Waitstates schlagen bei nichtsequentiellem Code voll 
durch. Bei sequentiellem Code sieht es deutlich besser aus, kann aber 
bei ausgiebiger Verwendung von mit 32 Bits codierten Befehlen ebenfalls 
etwa verhungern.

Das Problem mit Flash-Waitstates teilen viele Microcontroller, wenn 
deren Taktfrequenz höher als das Tempo der verwendeten Flash-Technologie 
ist. Weshalb da mitunter auch etwas mehr Aufwand getrieben wird als bei 
den recht einfachen STM32F1, beispielsweise um ein paar Schleifenanfänge 
puffern zu können.

von chris (Gast)


Lesenswert?

>Bei sequentiellem Code sieht es deutlich besser aus, kann aber
>bei ausgiebiger Verwendung von mit 32 Bits codierten Befehlen ebenfalls
>etwa verhungern.

https://de.wikipedia.org/wiki/ARM_Cortex-M3 :

"Zum Laden eines Befehls werden nur 16 Bit benötigt, das 
Speicherinterface ist aber 32 Bit breit, und es werden immer zwei 
Befehle gleichzeitig geladen (fetch). Ein Befehl wird jeweils 
zwischengespeichert"

Wäre das nicht 72Mhz / 3Waitstates * 2 ?

Beitrag #4961033 wurde von einem Moderator gelöscht.
von Mampf (Gast)


Lesenswert?

Axel S. schrieb:
> Diese Aussage ergibt überhaupt keinen Sinn. Wie sollte deiner Meinung
> nach ein µC denn aussehen, um "wirklich dafür geschaffen zu sein"
> bare-matal programmiert zu werden?

Eine harte Grenze gibts da nicht. Wenn man ohne weitere Abstraktion (wie 
du so schön geschrieben hast) arbeiten will, dann wird es halt ab einer 
bestimmten Komplexität wenig praktikabel.
Und das ist bei vielen STM32 schon zumindest schon teilweise so. Ich 
habs probiert, sowohl mit Peripheral Lib als auch ohne. Warm geworden 
bin ich persönlich (!!!) damit nicht.

Axel S. schrieb:
> Auch das ist Unsinn. Was man will, ist Abstraktion. Daß ST es nicht
> hinbekommt, benutzbare Abstraktionslayer für ihre Chips auszuliefern,
> heißt ja nicht daß es niemand hinbekommt. Und ganz besonders heißt das
> nicht, daß du keinen dir genehmen Abstraktionslayer bauen könntest.

Ich glaube, wir reden vom selben Thema.
Man KANN sich ein solches Abstraktionslayer bauen, aber mal ehrlich, wer 
will das schon in seiner Freizeit machen?
Für den Professionellen Einsatz ist das anders.

Axel S. schrieb:
> Es gibt 3rd Party Abstraktionslayer, die nicht nur schöner als SPL und
> HAL sind, sondern sogar plattformübergreifend funktionieren. Ich mag
> bspw. libopencm3.

Danke für den Tipp. Das könnte einen Blick wert sein.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Axel S. schrieb:
> Ich mag
> bspw. libopencm3.

Danke für den Tipp!

A. K. schrieb:
> Das Problem mit Flash-Waitstates teilen viele Microcontroller, wenn
> deren Taktfrequenz höher als das Tempo der verwendeten Flash-Technologie
> ist.

Man kann ja Code, der performant und ohne Wait-States laufen soll per
1
__attribute__( ( section(".data") ) )

ins RAM auslagern :)

von meckerziege (Gast)


Lesenswert?

Mampf F. schrieb:
> A. K. schrieb:
>> Das Problem mit Flash-Waitstates teilen viele Microcontroller, wenn
>> deren Taktfrequenz höher als das Tempo der verwendeten Flash-Technologie
>> ist.
>
> Man kann ja Code, der performant und ohne Wait-States laufen soll per
> __attribute__( ( section(".data") ) )
>
> ins RAM auslagern :)

Oder gleich in den Core-Coupled-Memory (CCM), falls der Chip sowas hat.

Das ist einer der Hauptnachteile von AVR: Er kann nur In-Place 
Execution. Das ist bei den aktuellen STM32 besser gelöst.

Auch das Gejammere "der Chip braucht aber 2 Wait-States bei 72 MHz" ist 
zu kurz gegriffen. Hier muss man sich gedanklich vom "simplen" AVR 
trennen.
Bei STM32 gibt es prefetch buffer und ggf. auch caches. Effektiv ist es 
sogar nochmal ein Stück besser, da der Flash üblicherweise 32 Bit breit 
angesprochen wird, die meisten ARM Thumb instructions aber nur 16 bit 
Breite haben. => Pro Fetch zwei Instructions. Zahlreiche Befehle sind 
auch nicht single-instruction sondern brauchen 2 oder mehr Zyklen 
(ähnlich wie bei AVR beispielsweise load und store). D.h. dass nicht 
zwingend der Flash hierbei der Flaschenhals ist. Falls doch: Code mit 
großem Performancebedarf kommt bei mir in den RAM/CCM.

Allgemein bin ich privat und in der Arbeit von AVR auf ARM umgestiegen. 
Schon gegen einen STM32F0 wirkt jeder AVR eher wie Spielzeug...
Das Gehampel mit 8 bit breiten Registern und winzigem 16 bit 
Adressbereich... (ja es gibt Anwendungen für Microcontroller wo man auch 
mal 128kByte adressieren will.)
Da hab ich lieber FPU, 32-bit Register, 32-bit Adressen auf nem ARM.

AVR haben schon noch hier und da ihre Daseinsberechtigung. Primär setze 
ich aktuell aber auf STM32 bzw. ARM und komme damit besser zurecht.

Und um nochmal Öl ins Feuer zu gießen, meine Anwendungen sind:
- Ohne HAL/Cube/etc.
- Bare Metal :-)
(also kein Arduino-ähnliches Gefrickel sondern anständige Entwicklung)

von (prx) A. K. (prx)


Lesenswert?

chris schrieb:
> "Zum Laden eines Befehls werden nur 16 Bit benötigt,

Bei den Cortex M3 sind Befehle nicht selten 2 Halbworte lang.

von Hans-Georg L. (h-g-l)


Lesenswert?

Axel S. schrieb:

> Es gibt 3rd Party Abstraktionslayer, die nicht nur schöner als SPL und
> HAL sind, sondern sogar plattformübergreifend funktionieren. Ich mag
> bspw. libopencm3.

Habe ich mir gerade mal angeguckt ....

Ob man jetzt Parameter einzeln an eine Funktion übergibt oder wie die 
HAL in Strukturen verpackt ... über Schönheit kann man trefflich 
streiten ;-)
Und die STM32F4 RCC Funktionen passen für den F446 überhaupt nicht.

Eine Herstellerunabhängige (lowlevel) Abstraktionsschicht halte ich für 
utopisch und auch nicht unbedingt für wünschenswert. Da reicht mir die 
CMSIS. Eine Abstraktionsschicht müsste auf Anwendungsebene sein.

Ich habe Arm7, 9 Erfahrung, in der CortexM Ecke bin ich neu und verwende 
CubeMx und die HAL zum hineinschnuppern. Aber langfristig werde ich C++ 
und Templates verwenden.

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


Lesenswert?

meckerziege schrieb:
> Oder gleich in den Core-Coupled-Memory (CCM), falls der Chip sowas hat.

Hatten wir gerade: zumindest der STM32 kann daraus keinen Code
ausführen.  Musste ich mich auch eines besseren belehren lassen.

So schön RAM-Funktionen ansonsten sind, sie schlucken natürlich
von der Ressource, die typischerweise bei einem Controller am ehesten
zur Neige geht.  Insofern sind sie kein Universal-Totschlagargument
dagegen, dass der Flash eben doch nur einen Bruchteil der Taktfrequenz
schafft, die der Core kann.  Dafür braucht natürlich die höhere
Taktfrequenz auch dann Strom, wenn der Prozessor gerade in Waitstates
vor sich hin idlet.

(Prinzipiell wäre es auch beim AVR kein Thema gewesen, den Core selbst
schneller auszulegen, aber da er ohnehin nur aus dem Flash und nicht
aus dem RAM ausführen kann, wäre es dort gänzlich unsinnig.)

meckerziege schrieb:
> wo man auch mal 128kByte adressieren will.)

128 KiB gehen beim AVR noch, da er den Code wortweise adressiert
und man bei einem 128er Controller selten mehr als die Hälfte davon
für Daten benötigt, aber jenseits der 128 KiB ist es wirklich lästig,
einem AVR das abzuquälen.

> Da hab ich lieber FPU

Naja, die findest du aber beim Cortex-M auch eher am oberen Ende der
Fahnenstange, und selbst dann ist sie leider nur 32bittig.  Sie im
gleichen Absatz wie einen STM32F0 aufzuführen, vermischt schon einiges.

von Vincent H. (vinci)


Lesenswert?

Jörg W. schrieb:
> meckerziege schrieb:
>> Oder gleich in den Core-Coupled-Memory (CCM), falls der Chip sowas hat.
>
> Hatten wir gerade: zumindest der STM32 kann daraus keinen Code
> ausführen.  Musste ich mich auch eines besseren belehren lassen.
>
> Naja, die findest du aber beim Cortex-M auch eher am oberen Ende der
> Fahnenstange, und selbst dann ist sie leider nur 32bittig.  Sie im
> gleichen Absatz wie einen STM32F0 aufzuführen, vermischt schon einiges.


Man darf hier nicht alle STM32 über einen Kamm scheren. Es gibt schon 
Exemplare, bei denen ein Teil oder gar das ganze SRAM am Instruction-Bus 
hängt. Leider ist die Namensgebung hier sehr verwirrend, da es meines 
Wissens nach sogar in ein und der selben Familie (z.B. STM32F4) Chips 
gibt die eine entpsrechende Bus-Anbindung haben... und welche dies eben 
nicht haben.

Und die FPU gibts mittlerweile auch auf Double-Breite...

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


Lesenswert?

Vincent H. schrieb:

> Man darf hier nicht alle STM32 über einen Kamm scheren. Es gibt schon
> Exemplare, bei denen ein Teil oder gar das ganze SRAM am Instruction-Bus
> hängt.

Es ging nicht um SRAM allgemein, sondern um CCM.

Der hängt eben nur am D-Bus des Cores.

> Und die FPU gibts mittlerweile auch auf Double-Breite...

OK, sind mir leider noch nicht übern Weg gelaufen.

Allerdings bräuchte man dann sinnvollerweise auch die CMSIS-DSP-Lib
für 64 Bit.

von Stefan F. (Gast)


Lesenswert?

@Mampf F.

> Man kann ja Code, der performant und ohne Wait-States laufen soll per
> ... ins RAM auslagern :)

Danke, du hast mir gerade einen Punkt aus meiner TODO Liste abgenommen. 
Jetzt weiss ich, wie man das macht. Ob ich's benutzen werde...mal sehen.

von Vincent H. (vinci)


Lesenswert?

Jörg W. schrieb:
> Vincent H. schrieb:
>
>> Man darf hier nicht alle STM32 über einen Kamm scheren. Es gibt schon
>> Exemplare, bei denen ein Teil oder gar das ganze SRAM am Instruction-Bus
>> hängt.
>
> Es ging nicht um SRAM allgemein, sondern um CCM.

Hier für einen STM32F303 und dessen Derivate:

http://www.st.com/content/ccc/resource/technical/document/application_note/bb/09/ca/83/14/e9/44/c5/DM00083249.pdf/files/DM00083249.pdf/jcr:content/translations/en.DM00083249.pdf

"Executing a simple code from CCM RAM"

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


Angehängte Dateien:

Lesenswert?

Vincent H. schrieb:
> Hier für einen STM32F303 und dessen Derivate:

Tja, dann wird die Sache einfach noch unübersichtlicher: offenbar
kocht da jeder STM32 sein eigenes Süppchen.  Die Bustmatrix bei
STM32F41xx und STM32F42xx zeigt den CCM wirklich direkt am Core (nur
so hat der Name ja auch wirklich Sinn), und dann eben nur am D-Bus,
siehe Bild.

Ist der 303 vielleicht neuer?  Eventuell hat man ja da erkannt, dass
es sinnvoll ist, ihn auch für den I-Bus zur Verfügung zu haben.

von nips (Gast)


Lesenswert?

Hallo,

ich kann nur aus meiner subjektiven Sicht heraus berichten, da ich 
ebenfalls von AVR nach Cortex M3 umgestiegen bin.

Ich muss sagen, dass dazwischen schon Welten liegen. Ich habe für einen 
Quadrokopter das Design von AVR nach stm32F103 portiert. Mit dem AVR 
musste ich teilweise Handstände machen, weil die Division von 32bit 
Werten extrem langen Code im AVR erzeugt hat. Da habe ich mir dann mit 
Bitshift-Kniffen aushelfen müssen. Das war überhaupt kein Thema beim M3. 
Da konnte ich regelrecht verschwenderisch sein.

Dann der ganz entscheidende Vorteil, der das M3 System wesentlich 
performanter machte: Die DMA. Viele Sachen laufen komplett im 
hintergrund, ohne das die CPU einen Finger rühren müsste.

Die geschickte Anwendung von DMA erleichtert vieles wesentlich. Das ist 
schon richtig cool!

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


Lesenswert?

nips schrieb:
> für einen Quadrokopter

Das ist eine Anwendung, bei der ich wohl auch nicht erst über einen
AVR nachdenken würde.

von DraconiX (Gast)


Lesenswert?

Jörg W. schrieb:
> nips schrieb:
> für einen Quadrokopter
>
> Das ist eine Anwendung, bei der ich wohl auch nicht erst über einen AVR
> nachdenken würde.

Bei den ersten Coptern damals war der AVR aber ausschließlich im 
Einsatz, und es ging auch ;-) schwerlich, aber es ging.

von Stefan K. (stefan64)


Lesenswert?

Jörg W. schrieb:
> Ist der 303 vielleicht neuer?  Eventuell hat man ja da erkannt, dass
> es sinnvoll ist, ihn auch für den I-Bus zur Verfügung zu haben.

Vielleicht meinten sie beim F4 einfach, daß das Ablegen von Code im 
CCM-RAM nicht wirklich sinnvoll ist, weil dort der Flash-Zugriff 128 Bit 
breit ist und 64 dieser 128-Lines gecached werden.

Viele Grüße, Stefan

Beitrag #4961471 wurde von einem Moderator gelöscht.
Beitrag #4961487 wurde von einem Moderator gelöscht.
Beitrag #4961504 wurde von einem Moderator gelöscht.
von chris (Gast)


Lesenswert?

> Leute, muß ich hier wirklich noch mal den Z80 in Erinnerung rufen,

Ja damals ...
Wenn Du das gleiche machst wie damals, ist auch ein Prozessor von damals 
ausreichend.
Ich mache meistens Signalverarbeitung, digitale Filter, 
Soundgeneratoren. Dafür ist ein Z80 viel zu schwach und ein AVR von 
heute auch.

Beitrag #4961536 wurde von einem Moderator gelöscht.
von grundschüler (Gast)


Lesenswert?

ich schreib meine Programme so, dass sie auf ARMs und AVRs laufen. Der 
ARM ist nicht viel anders als der AVR - nur muss man halt die 
GPIO-Peripherie zusätzlich einschalten und die Einstellung des Taktes 
ist etwas komplexer, womit man sich aber nicht zwingend befassen muss.

Beides ist gut. Der ARM besticht durch die Debug-Möglichkeiten, Der AVR 
ist mit winAVR etwas schneller programmiert. Für Aufgaben, die der AVR 
erledigen kann verwende ich eher den AVR als den ARM, weil es -etwas- 
schneller geht.

von DraconiX (Gast)


Lesenswert?

chris schrieb:
> Dafür ist ein Z80 viel zu schwach und ein AVR von
> heute auch.

Erzähle das mal ChaN :-D Der würde müde darüber lächeln!

von chris (Gast)


Lesenswert?

>Erzähle das mal ChaN :-D Der würde müde darüber lächeln!

Nein, er ist ein Profi, der das Maximum aus der minimalsten Hardware 
heraus holt. Ich tue das auch manchmal auf den Attinys.
Würde er einen ARM verwenden würde er noch mehr heraus holen. Meiner 
Ansicht nach ist er der perfekteste Elektroniker der Welt. Aber es 
bleibt auf die Art ein Hobby, den es ist was anderes ob man ein 
Modellflugzeug in Perfektion baut oder als Hardware einen Eurofighter 
zur Verfügung hat.

von Bernd (Gast)


Lesenswert?

Warum wurde der Beitrag mit den Synthesizer-Links gelöscht?

von Bernd K. (prof7bit)


Lesenswert?

grundschüler schrieb:
> nur muss man halt die
> GPIO-Peripherie zusätzlich einschalten

Und das auch nur bei manchen ARMs.

Beitrag #4961611 wurde von einem Moderator gelöscht.
Beitrag #4961615 wurde von einem Moderator gelöscht.
Beitrag #4961618 wurde von einem Moderator gelöscht.
Beitrag #4961635 wurde von einem Moderator gelöscht.
Beitrag #4961637 wurde von einem Moderator gelöscht.
Beitrag #4961640 wurde von einem Moderator gelöscht.
Beitrag #4961642 wurde von einem Moderator gelöscht.
Beitrag #4961643 wurde von einem Moderator gelöscht.
Beitrag #4961659 wurde von einem Moderator gelöscht.
Beitrag #4961668 wurde von einem Moderator gelöscht.
Beitrag #4961687 wurde von einem Moderator gelöscht.
Beitrag #4961694 wurde von einem Moderator gelöscht.
Beitrag #4961708 wurde von einem Moderator gelöscht.
Beitrag #4961710 wurde von einem Moderator gelöscht.
von Lutz (Gast)


Lesenswert?

Es wurde wie immer schon alles gesagt. Und zwar mehrfach, mit anderen 
Worten usw..

Für mich bleiben die Cortex M im Vorteil (u.a. das zigtausendfach 
erwähnte Debugging, DMA und Code aus dem RAM ausführen). Letzteres ist 
die Voraussetzung für IAP (In Application Programming). Ohne dem könnte 
ich kein Update z.B. über CAN machen.
Wobei die STM32-Reihe aber nicht mein Fall ist (ich sie aber aus 
Preisgründen gerade nutze).

Die LPC1xxx gefallen mir da besser, da "echte" 32 bit neu geschaffen 
(und keine aufgebohrten 16-bitter).
Besonders die hammermäßige pin switch matrix z.B. bei den LPC81x und 
LPC15xx ist ein moderner Traum. Der einen aber auch zur Nachlässigkeit 
bei der Planung führen kann (wie ABS und Airbag teilweise beim Auto...).

Beitrag #4961752 wurde von einem Moderator gelöscht.
Beitrag #4961759 wurde von einem Moderator gelöscht.
Beitrag #4961780 wurde von einem Moderator gelöscht.
Beitrag #4961782 wurde von einem Moderator gelöscht.
Beitrag #4961783 wurde von einem Moderator gelöscht.
von Gerhard O. (gerhard_)


Lesenswert?

Antoine de Saint-Exupery ist bekannt für viele seiner Sprüche. Ich habe 
mir angemaßt diesen Spruch auf uC hinzubiegen (was sehr viel Mühe 
gekostet hat) und um dieses Thema (nach Möglichkeit) zu Ende zu bringen:

"Ein Elektronik Entwickler weiß letztlich dann, dass er (fast) 
Perfektion erreicht hat, wenn die von ihm gewählte Techniklösung alle 
Anforderungen seines Projekts ausreichend erfüllt ohne irgendwelche 
wichtige Wünsche offen zulassen und nicht mehr als notwendig (Zeit) 
Ressourcen verschwendet."

Gerhard;-)


"A designer knows he has achieved perfection not when there is nothing 
left to add, but when there is nothing left to take away"

Antoine de Saint-Exupery

P.S. Ich werde Euch nicht mehr traktieren - Ich verspreche es;-)

von Stefan F. (Gast)


Lesenswert?

> Code aus dem RAM ausführen). Letzteres ist
> die Voraussetzung für IAP (In Application Programming).

Das verstehe ich nicht. Die meisten AVR's können doch auch im laufenden 
Betrieb aktualisiert werden - durch die Applikation selbst. jeder 
Bootloader funktioniert dort so.

Beitrag #4961832 wurde von einem Moderator gelöscht.
Beitrag #4961840 wurde von einem Moderator gelöscht.
von Bernd K. (prof7bit)


Lesenswert?

Stefan U. schrieb:
>> Code aus dem RAM ausführen). Letzteres ist
>> die Voraussetzung für IAP (In Application Programming).
>
> Das verstehe ich nicht. Die meisten AVR's können doch auch im laufenden
> Betrieb aktualisiert werden - durch die Applikation selbst. jeder
> Bootloader funktioniert dort so.

Auch einige ARMs (oder viele? Zumindest schon der zweite der mir je in 
die Finger fiel) können das Flash beschreiben von einem Programm aus das 
ebenfalls im Flash liegt. Die Ausführung pausiert dann einfach sobald 
die nächste Instruktion aus dem Flash geholt werden würde, so lange bis 
das Schreiben beendet ist.

Wenn man in einem simplen Bootloader eh nur blockierend auf das Ende des 
Schreibens wartet fällt das gar nicht auf.

Aber man könnte natürlich mit Hilfe von Code im RAM währenddessen 
anderes tun, evtl sogar Interrupts wenn man die ebenfalls ins RAM 
schieben würde.

Beitrag #4961885 wurde von einem Moderator gelöscht.
Beitrag #4961888 wurde von einem Moderator gelöscht.
Beitrag #4961890 wurde von einem Moderator gelöscht.
von Lutz (Gast)


Lesenswert?

Hm, ich werd mich doch nicht etwa vertun?
Ein Bootloader ist doch eher ISP.
Und wenn ich ein Programm aus dem Flash ausführe und ins Flash schreibe, 
überschreibe ich doch mein Programm und Schluß ist. So vergleichbar wie 
den Ast absägen, auf dem man sitzt. Ich rede jetzt nicht davon, Flash 
als EEPROM zu nutzen und einzelne freie sections oder pages dafür zu 
verwenden, sondern ein komplett neues Programm auf den Chip zu 
übertragen. Da müssen zumindest bei den LPC1xxx alle relevanten 
Funktionen aus dem RAM aufgerufen werden, um dann an z.B. 0x00000000 ins 
Flash zu schreiben (inkl. Vektortabelle, sofern dafür nicht die 
Interrupts deaktiviert wurden).

Beitrag #4961985 wurde von einem Moderator gelöscht.
Beitrag #4961987 wurde von einem Moderator gelöscht.
Beitrag #4961989 wurde von einem Moderator gelöscht.
Beitrag #4962015 wurde von einem Moderator gelöscht.
Beitrag #4962016 wurde von einem Moderator gelöscht.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lutz schrieb:
> Und wenn ich ein Programm aus dem Flash ausführe und ins Flash schreibe,
> überschreibe ich doch mein Programm und Schluß ist.

Natürlich darf sich das Stückchen, welches den Schreibvorgang
abwickelt, nicht selbst überschreiben.  Das ist ja aber auch nicht
nötig.  Der Teil, der das Neuschreiben durchführt, wird üblicherweise
Bootloader genannt, und man reserviert dafür ein Stück Flash ganz am
Anfang oder am Ende des Flash-Speichers (beim AVR ist es immer am Ende,
da es dort von der Hardware so vorgegeben ist – Beschreiben des Flashs
ist dort aus Sicherheitgründen nicht von überall her zugelassen).

Du kannst sowieso nicht einfach den Code aus dem Flash in den RAM
kopieren und dann dort ausführen – er müsste in diesem Fall speziell
auf die Adressen des RAMs gelinkt worden sein.  Code ist beim ARM
(normalerweise) nicht positionsunabhängig.

Beitrag #4962033 wurde von einem Moderator gelöscht.
Beitrag #4962036 wurde von einem Moderator gelöscht.
Beitrag #4962047 wurde von einem Moderator gelöscht.
Beitrag #4962049 wurde von einem Moderator gelöscht.
von Lutz (Gast)


Lesenswert?

Jörg W. schrieb:
> Du kannst sowieso nicht einfach den Code aus dem Flash in den RAM
> kopieren und dann dort ausführen – er müsste in diesem Fall speziell
> auf die Adressen des RAMs gelinkt worden sein.  Code ist beim ARM
> (normalerweise) nicht positionsunabhängig.

Das (zumindest...) ist mir schon klar. Bei den LPC1xxx wird das (mit 
LPCOpen als "HAL") mit Makros gelöst. __RAMFUNC(RAM) vor einer Funktion 
sorgt z.B. dafür, daß die Funktion ins RAM gelinkt wird. Und das Ganze 
wird natürlich im Flash gespeichert, um zur Laufzeit überhaupt ins RAM 
geladen werden zu können (woher soll das Programm auch sonst kommen; nur 
um Mißverständnissen vorzubeugen).

Aber das mit dem Bootloader werde ich mir morgen noch mal (auf 
LPC-Basis) anschauen. Ich habe irgendwo abgespeichert, daß die Dinger 
beim Reset das Flash mit einer Prüfsumme "abgrasen" und entscheiden, ob 
ein gültigee Programm vorliegt. Wenn nicht, wird der Bootloader anhand 
einiger gesampelter Pins gestartet. Aber so ganz bekomme ich es gerade 
nicht mehr zusammen.

von W.S. (Gast)


Lesenswert?

Robert schrieb im Beitrag #4961987:
> Sich als Anfänger in die umfangreiche ARM Materie reinzuknien macht
> meiner Meinung nach nur Sinn wenn...

Ach nö.

Wenn man erstmal mit einem 32 Bitter zu Potte gekommen ist, will man 
nicht wirklich mehr zurück zu 16 oder gar 8 Bittern. Von den Problemen 
ganz abzusehen, die eine Harvard-Architektur bei C macht wegen der 
Prinzip-Unterschiede zwischen Pointern auf const und nicht-const.

Die Schwierigkeiten beim Einstieg, die es angeblich bei den ARM-Cortex 
gibt, sind im Grunde nur böse Erfahrungen mit aufgeblähten IDE's, noch 
aufgeblähteren Hersteller-Bibliotheken und schlecht geschriebenen 
Dokumentationen.

An den Chips liegt es nicht, denn die Cortex-M sind dramatisch 
bastlerfreundlicher verstehbar als zuvor die ARM7TDMI- und 
ARM9-Architektur. Muß man mal wirklich so deutlich sagen.

Dazu kommt allerdings noch eine auf 8 Bit Architekturen ausgerichtete 
Denkweise bei Umsteigern, die oft genug zu ausgesprochen "ungünstigen" 
Lösungen führt, gerade weil eben der Schreiber gemeint hat, etwas zur 
Effektivtät selber beitragen zu wollen.

Richtig heftig sieht man das bei der Verwendung von LC-Displays. 
Alpha-Displays machen ja bei Achtbittern keine Probleme, doch schon bei 
kleinen Grafikdisplays hört's auf. Da fehlen den Achtbittern fast immer 
die Adreßräume oder schlichtweg der eingebaute RAM. Das führt dann zu 
Krampflösungen, die bei einem 32 Bitter einfach gegenstandslos werden.

Auch Dinge wie digitale Signalverarbeitung sind für Achtbitter ne Nummer 
zu groß, da sollte man dann schon auf einen Cortex M4F orientieren, wenn 
man sich einen dedizierten DSP nicht leisten will oder kann.

Kurzum: wer bereit ist, ein wenig dazu zu lernen, wird schon nach kurzer 
Zeit nicht wieder zurück zu Achtbittern wollen - es sei denn, die 
anstehende Aufgabe ist prädestiniert dazu. Das Leuchtturm-Beispiel dazu 
ist der Mini-Frequenzzähler mit einem PIC16Fxxx, weil diese Chips wenig 
Strom schlucken und eben einen dafür bestens geeigneten 
Asynchron-Prescaler haben, den man woanders nicht so leicht findet.

W.S.

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


Lesenswert?

Lutz schrieb:
> Ich habe irgendwo abgespeichert, daß die Dinger beim Reset das Flash mit
> einer Prüfsumme "abgrasen" und entscheiden, ob ein gültigee Programm
> vorliegt.

In diesem Falle müsstest du wohl sicherstellen, dass du diese Prüfsumme
beim Aktualisieren der Firmware korrekt mit nachziehst.

Beitrag #4962120 wurde von einem Moderator gelöscht.
Beitrag #4962123 wurde von einem Moderator gelöscht.
Beitrag #4962126 wurde von einem Moderator gelöscht.
Beitrag #4962136 wurde von einem Moderator gelöscht.
Beitrag #4962153 wurde von einem Moderator gelöscht.
Beitrag #4962164 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Obwohl der Thread wieder sehr lang geworden ist möchte ich mich bei euch 
für die große Menge konstruktiver Beiträge bedanken. Ihr habt falsche 
Annahmen meinerseits korrigiert und auf einige wichtige Sachen 
hingewiesen, die ich als Anfänger wissen sollte und auf die von alleine 
vermutlich nicht so schnell gekommen wäre.

Schade finde ich, dass der Moderator mal wieder alle Hände voll zu tun 
hatte, unangemessene Beiträge zu löschen.

Wie dem auch sei, mir war es wichtig, mich bei euch zu bedanken. Bitte 
hier nicht weiterdiskutieren, das Thema ist beendet.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.