Ich spiele mich gerade mit dem UART herum.
Der ist ja nicht sooo kompliziert, und letztlich ist es nicht viel
anders als beim AVR...
Ich hätte nun, um diesen zu initialisieren einfach die drei Control
Register befüllt und ab die Post.
Nun sehe ich aber, dass die vom CooCox bereitgestelle "Library" "fertig
vorverdaute" CMSIS Funktionen zur Verfügung stellt, die das auch machen,
aber halt auf einem höheren Abstraktionsniveau und eigentlich recht
"umständlich" und schwerfällig. Es ist alles verständlich und
nachvollziehbar, jedoch frage ich mich, ob man diesen Code nun verwenden
soll, oder als Anfänger nicht besser an der Basis bleibt, und die
Register direkt beschreibt.
Die Frage: was meinen erfahrene ARM Entwickler dazu? Verwendet ihr diese
CMSIS Funktionen? Irgendwie fühle ich mich um das "Erlebnis betrogen",
wenn ich die fertig vorgekauten Dinger verwende, andererseits sollte man
vielleicht gleich von Anfang an kompatiblen und portierbaren Code
schreiben? Ich bin irgendwie ratlos, welchen Weg ich im Zuge des
Einstiegs wählen soll...Beides geht nicht.
Bitte um einen Tipp, wie ihr das macht!
Also: wenn ich mir für den Anfang bloß mal die stm32f4xx.h einziehe und
alles "selbst" mache, habe ich glaube ich mehr davon, denn schließlich
will ich den Controller kennen lernen, und nicht eine Library. Ähnlichen
Beiträgen gemäß scheint es hier eine Glaubensfrage zu sein, welchen
Ansatz man wählt. Ich wollte nur vermeiden, dass man mir dann später bei
irgendeiner Frage die rote Karte zeigt, indem man mir signalisiert
"hättest du doch die CMSIS genommen" oder "so wie du das machst ist es
doch kompletter Blödsinn, weißt du denn nicht, dass es da fertige
Libraries gibt", u.s.w.
Wenn ich den Controller dann besser kenne, kann ich ja immer noch
abstrakter werden, und auf fertigen Code zurückgreifen.
>dass man mir dann später bei>irgendeiner Frage die rote Karte zeigt, indem man mir signalisiert>"hättest du doch die CMSIS genommen" oder "so wie du das machst ist es>doch kompletter Blödsinn, weißt du denn nicht, dass es da fertige>Libraries gibt", u.s.w.
Ich denke die meisten benutzen den Code von ST.
Warum auch nicht?
Wenn du alles selber machst ist es sehr wahrscheinlich
das du kaum Antworten bekommst wenn du Probleme hast
und mit eigenem Code daher kommst. Den schaut sich
dann eben kaum noch einer an.
Weiter sind die Libs sehr hilfreich, wenn du mit mehreren Controllern
arbeiten willst. Sei das vom STM32F0 bis zum STM32F4. Hier varieren die
Defines und Enums nur sehr wenig. Viel weniger als die Register.
Ausserdem ist es sehr übersichtlich. Ich habe mit einem STM32F4
angefangen und bin ohne grossen Zeitaufwand auch mit Copy&Past in ein
STM32F0 eingearbeitet.
ARM Einsteiger schrieb im Beitrag #3165498:
> Ich wollte nur vermeiden, dass man mir dann später bei> irgendeiner Frage die rote Karte zeigt, indem man mir signalisiert> "hättest du doch die CMSIS genommen" oder "so wie du das machst ist es> doch kompletter Blödsinn, weißt du denn nicht, dass es da fertige> Libraries gibt", u.s.w.
Das kannst Du nicht vermeiden. Egal was und wie Du es machst - immer
wird es einen geben, dem das so nicht passt.
Mach es so, wie Du es machen willst. Im Zweifelsfall muß sich der Rest
der Welt nach Dir richten :-)
Patrick B. schrieb:> Weiter sind die Libs sehr hilfreich, wenn du mit mehreren Controllern> arbeiten willst.
Das halte ich aber für stark geschmeichelt. Versuch mal, mit dem
Standard-Lib-Zeuchs vom STM32, auf einem LPC zu Potte zu kommen.
ARM Einsteiger schrieb im Beitrag #3165400:
> Bitte um einen Tipp, wie ihr das macht!
Ich kann hier ja nur für mich schreiben: ich schreib mir schlichtweg
alles selbst, lediglich die Header-Dateien für die jeweiligen
Controller, also STM32F10xxxblabla.h oder LPCxyzblabla.h benutze ich,
wenn es geht. Notfalls mach ich mir die auch selbst zurecht.
Ansonsten schreibe ich strikt modular, also beispielsweise eine
"serial.c" und dazu eine "serial.h" für's Serielle, wobei ich die .h
eigentlich zwischen verschiedenen uC nie ändere. So hab ich das gleiche
Interface bei verschiedenen Typen und Architekturen (NXP, ST, Nuvoton,
Fujitsu ua.)
Wenn du allerdings den GCC benutzt und Code auch für die ARM7 Typen
schreibst, dann hast du das Problem, ggf. die Interruptroutinen in ne
separate Quelle auszulagern, weil der GCC (im Vergleich zum Rest der
Welt) ARM und THUMB in einer Quelle nicht beherrrscht.
W.S.
ARM Einsteiger schrieb im Beitrag #3165498:
> Also: wenn ich mir für den Anfang bloß mal die stm32f4xx.h einziehe und> alles "selbst" mache, habe ich glaube ich mehr davon, denn schließlich> will ich den Controller kennen lernen, und nicht eine Library.
Du kannst natürlich alles zu Fuss machen. Aber notwendig ist das nicht
mehr. Der Trend in der modernen Embeddedwelt geht ganz klar in Richtung
fertiger Komponenten. Dazu gehören, neben diverser Middleware, zu einem
grossen Teil auch Treiberbibliotheken.
Viele Entwickler schimpfen zwar darauf weil so eine Fremdbibliothek auch
Einfluss auf den persönlichen Programmierstil nimmt, aber das ist im
Grunde esotherisch. Faktisch sind gute Bibliotheken wie die von ST
durchaus geeignet ein sicheres und funktionales System mit einer Menge
Zeitersparnis zu erstellen. Mit Coocox wirst du sicher kein SIL-2
erreichen, aber um zeitgemässe Entwicklung moderner Mikrocontroller zu
erlernen ist es das richtige Prinzip.
Matthias schrieb:> Faktisch sind gute Bibliotheken wie die von ST> durchaus geeignet..
den Anwender in einem Ozean unnützer #define's zu ertränken und den
Flash vollzustopfen. Kein Wunder, daß man heutzutage schon für ein
"Hello World" mindestens ein halbes Megabyte Flash benötigt.
Kopfschüttel..
W.S.
Nach einer kleinen Gewöhnungsphase muss ich zugeben, dass die ST CMSIS
Library durchaus Vorteile bietet. Das Reference Manual muss man trotzdem
lesen, genauso muss man anfangs nachsehen, was die Funktionen denn so
machen und welche Register im Detail beschrieben werden. Man muss sich
aber nicht mehr um die ganz untersten Details kümmern, z.B. dass man den
Wert zuerst um 5 Bits nach links schieben muss, bevor man ihn mit dem
Register verodert...Trotzdem weiß ich, was passiert und lerne die MCU
genauso gut kennen, als ob ich alles selbst erledige. Vielleicht sogar
ein wenig besser, da man anhand des Library-Codes gleich sieht, worauf
es ankommt. Ohne jemals hineingeschaut zu haben würde ich die CMSIS aber
nicht benutzen wollen, da dies einem totalen Blindflug gleichkäme ;-)