Hallo, was ist die günstigste Variante, einen ARM Cortex M? Prozessor
per C/C++ zu programmieren. Ich stelle mir eine API?
Entwicklungsumgebung vor, die mir alle Funktionen des Prozessor in einer
Bibliothek bereitstellt..
also die tiefen Schichten wie Treiber, OS etc. sollten schon vorhanden
programmiert sein...
PS: Ich weiss nicht wie dumm meine Frage ist, aber wie fange ich am
besten an um so ein Prozessor programmieren zu können. Was benötige ich
alles - was kostet es?
Danke
epikao schrieb:> Entwicklungsumgebung vor, die mir alle Funktionen des Prozessor in einer> Bibliothek bereitstellt..>> also die tiefen Schichten wie Treiber, OS etc. sollten schon vorhanden> programmiert sein...
und was soll das bringen? Ob du dich nun mit der API vom Treiber
auseinander setzen musst, oder mit dem Registern der CPU ist doch egal.
Oder erwartest du eine API wie Linux oder Windows bietet die auf jeder
Plattform vorhanden ist?
epikao schrieb:> also die tiefen Schichten wie Treiber, OS etc. sollten schon vorhanden> programmiert sein...
programmiert ist schon alles, nurnoch compilieren für deinen µC musst du
es. Da gibt es viele verschiedene:
FreeRTOS, Nuttx, uCos, RTX, Micrium hat auch eines, usw.
Aber einarbeiten musst du dich selbst, das kann dir niemand abnehmen.
> Ich stelle mir eine API? Entwicklungsumgebung vor, die mir alle Funktionen> des Prozessor in einer Bibliothek bereitstellt..
Stichworte:
CMSIS
LPCOpen
Hallo epikao,
es gibt mehre Typen von APIs, nach denen Du suchst. Angefangen bei den
Standardlibraries von C und C++ bis hin zu Treibern für die speziellen
Eigenschaften der Hardware, auf der Deine Software laufen soll.
Mit dem GCC kann man recht einfach Code für den ARM schreiben. Die
meisten Hersteller liefern dafür passenden Startup Code (das ist der
Code, der üblicherweise vor main() läuft) und Linkerskripte.
Solange man nur auf die CPU zugreift, spürt man kaum einen Unterschied
zu anderen Arten von Plattformen. Man kann sogar mit boost und anderen
libraries arbeiten.
Wenn es dann zur Hardware kommt, wird es schon etwas haariger. Die
Datenblätter die ich bis jetzt gelesen haben, waren meist schlecht und
man musste sich die gesuchten Informationen aus Beispielen zusammen
suchen.
https://mbed.org ist ein Ansatz, Libraries für ARMs zu sammeln. Was ich
da bis jetzt gesehen habe, gefällt mir aber aus verschiedenen Gründen
nicht.
mfg Torsten
operator schrieb:> FreeRTOS, Nuttx, uCos, RTX, Micrium hat auch eines, usw.
hmm jetzt wirds vielleicht dämlich:
angenommen
-ich habe ein ARM Cortex M auf einem Board mit paar Tasten und LED's
(die einfachsten Funktionen)...
-ich habe ein Laptop Win7
so was brauche ich nun alles um diese LED's anzusteuern..
d.h. welche Software kommt auf den Laptop, welche Software muss ich
vorgängig auf den ARM Cortex laden... mit welchem Kabel wird der ARM
programmiert ??
Danke
Arm gibt's von zig Herstellern, da gibt's ebenso viele
Programmieradapter. Die von stm haben z. B. Meist schon einen uart oder
USB bootloader drauf, da braucht man dann nicht zwangsläufig einen
Programmieradapter.
Der Compiler ist für die ARMs jedoch gleich, du brauchst jedoch
entsprechend angepasste linker Skripte für den Controller sowie die
Header mit den Register Definitionen für den verwendeten uC
https://www.mikrocontroller.net/articles/ARM_GCC
Ich würde einen GCC und make auf dem Laptop installieren, plus einen
Editor Deiner Wahl (z.B. Eclipse, Sublime, vim, emacs etc.). Ich nutze
einen JLink Pro zum flashen, da gibt es aber bestimmt auch günstigere
Lösungen!?
Zum Ansteuern der LEDs brauchst Du in der Regel das reference manual zu
Deinem µC. Dort steht dann irgend wo, welche Register welche Werte
bekommen müssen. Für den Zugriff auf die Register gibt es dann header,
die Details der Periherals beschreiben (Stichwort: CMSIS).
Ansonsten: http://www.mikrocontroller.net/articles/ARM
Torsten Robitzki schrieb:> steht dann irgend wo, welche Register welche Werte bekommen müssen. Für> den Zugriff auf die Register gibt es dann header, die Details der> Periherals beschreiben (Stichwort: CMSIS).
uii dann muss man aber sehr tief rein ... ich möchte den ARM Cortex
nicht so tief kennenlernen.
D.h. gibt es Libraries die mir das ansteuern aller Hardware per
Funktionen bereitstellt, d.h.:
Ausgang5(On)
Ausgang7(Off)
Busxy(lesen)
gibt es schon so Libraries? Oder muss man viel tiefer in die Hardware
wie eben bis zu den Register?
epikao schrieb:> operator schrieb:>> FreeRTOS, Nuttx, uCos, RTX, Micrium hat auch eines, usw.>> hmm jetzt wirds vielleicht dämlich:>> angenommen> -ich habe ein ARM Cortex M auf einem Board mit paar Tasten und LED's> (die einfachsten Funktionen)...> -ich habe ein Laptop Win7>> so was brauche ich nun alles um diese LED's anzusteuern..> d.h. welche Software kommt auf den Laptop, welche Software muss ich> vorgängig auf den ARM Cortex laden... mit welchem Kabel wird der ARM> programmiert ??
Ja welchen Cortex M? Das ist ja der Haken. Das einzige, was die
Controller der verschiedenen Hersteller gemein haben, ist der CPU-Kern,
Interrupt-Controller, ein spezieller Timer, und das Debuginterface.
Punkt.
Alles andere ist von Hersteller zu Hersteller so völlig verschieden, wie
es nur verschieden sein kann. Angefangen vom Programmierverfahren fürs
Flash über die Speicheraufteilung, die IO-Ports, UARTs, I2C, SPI,...
Teilweise ist es sogar von Modell zu Modell unterschiedlich.
fchk
Frank K. schrieb:> Ja welchen Cortex M?
nagut, welcher Hersteller der solche Cortex Mx verwendet, stellt gleich
komplette Libraries zur Verfügung, so dass man sich nicht mit den
Register etc. befassen muss?
Für den Anfang reicht doch ein 8 bit Controller vollkommen aus und wenn
die Leistung nicht mehr ausreichen würde, kann man immer noch auf 32
bit umsteigen.
Christian N. schrieb:> Für den Anfang reicht doch ein 8 bit Controller vollkommen aus
Da gebe ich Dir vollkommen Recht!
...aber wenn der TO unbedingt einen Cortex verwenden will...?
Vor einiger Zeit hab ich mich mal an das STM32F403 Discovery board
gewagt. Da hab ich ChibiOS benutzt, das ist ein RTOS mit Hardware
abstraction Layer.
Die unterstützen die STM32F? Serien ziemlich gut. Da muss man kein
Register für kennen. Für Windows wird (meines Wissens) auch eine fertige
Toolchain zum Download bereitgestellt, das sollte ziemlich einfach zu
benutzen sein.
Ansonsten gibt es noch libopencm3, die "nur" die API für diverse Chips
bereitstellt. Das ist im Prinzip das wonach du gefragt hast, aber
wahrscheinlich komplizierter zu benutzen als Chibios. Libopencm3 ist im
Prinzip eine freie CMSIS Alternative.
CMSIS ist der "Cortex Microcontroller Software Interface Standard".
Direkt von ARM, wahrscheinlich die umfassendste Library um
"plattformunabhängig" für ARM zu programmieren. Ich fand es aber
komplizierter, die Toolchain dafür aufzusetzen. Hauptsächlich aber, weil
ich so ein paranoider Linux nerd bin, der nicht die proprietären
Toolchains nutzen will.
Bei aller Abstraktion, kauf dir zum Einstieg kein 3€ China Board mit
unklarem support. Da ist im Zweifelsfall nicht einmal klar, wie die
programmiert werden müssen. Ich würde mal nach den Discovery boards
gucken.
epikao schrieb:> hmm jetzt wirds vielleicht dämlich:epikao schrieb:> angenommen> -ich habe ein ARM Cortex M auf einem Board mit paar Tasten und LED's> (die einfachsten Funktionen)...> -ich habe ein Laptop Win7>> so was brauche ich nun alles um diese LED's anzusteuern..
Du brauchst eine Toolchain, also ein Paket Software, bestehend aus
Compiler, Assembler, Linker, Bibliotheken usw.
Dann brauchst du das Referenzmanual zu dem Chip deiner Wahl. Zum einen
um darin zu lesen, was es denn so an Peripherie auf diesem Chip gibt und
zum anderen, um zu lesen ob der Chip einen eingebauten Bootlader hat
oder nicht. Hat er keinen, dann brauchst du ein JTAG/SWD-Geschirre
deiner Wahl (ULink, JLink und wie sie alle heißen) und die passenden
Brenn-Programme dazu. Hat er hingegen einen, dann lies, ob selbiger per
USB oder seriell zu benutzen ist.
Dann brauchst du zu deinem Chip natürlich auch eine Leiterplatte, wo
selbiger drauf kommt. Entweder du machst dir sowas selber oder du
greifst zu einem "Eval"-Board und studierst dort wieder das dazugehörige
Manual, damit du weißt, was auf dem Board überhaupt drauf ist und wo/wie
es an den Controller angeschlossen ist.
Fazit: Um ein intensives Kennenlernen der konkreten Hardware wirst du
nicht umhinkommen. Da helfen auch keine von dir gewünschten
Bibliotheken. Wenn dir das zu mühselig ist, dann schwenke um auf
irgendwas, das du in Java o.ä. programmieren kannst. Solche Boards gibt
es ebenfalls.
W.S.
DH1AKF K. schrieb:> Wenn Du "nicht so in die Tiefe" gehen willst, empfehle ich Dir:>> http://www.arduino.cc/en/Main/ArduinoBoardDue
vielen Dank, das ist schon mal was...
aber leider scheint nicht alles implementiert, wie z.B. der CAN
"These pins support the CAN communication protocol but are not not yet
supported by Arduino APIs."... d.h beim CAN müsdte ich mich direkt mit
den Register etc. befassen?
und kann ich da auf z.B Interrupts (negative, positve Flanke) zugreifen,
auch ohne in die tiefe zu gehen... bzw. steht der komplette
Funktionsumfang vom Cortex M3 in librarys zur Verfügung (mit Ausnahme
vom CAN)?
epikao schrieb:> aber leider scheint nicht alles implementiert,
Was ist alles?
Und selbst, wenn es zu einem Modul eine API gibt, welche die Details von
Dir fernhält, hast Du immernoch das Problem, dass die implementierte
Funktionalität anders ist als du es benötigst.
Daher bleiben dir nur wenige Optionen:
- Nehmen, was viele Anwender benötigen und daher vorhanden ist.
- Funktionalität dazukaufen, falls eigene Funktionen benötigt werden.
(fertig oder in Auftrag geben)
- nach einer ersten Kennenlernphase selbst in die Details absteigen.
Das Forum hier kann dich dabei unterstützen. Aber dafür mußt du
konkreter werden.
> D.h. gibt es Libraries die mir das ansteuern aller Hardware per> Funktionen bereitstellt, d.h.:> Ausgang5(On)> Ausgang7(Off)> Busxy(lesen)
Wie schon geschrieben, dafür ist CMSIS für die Cortexe da.
Damit kann man z.B. einen Ausgang so setzen:
Christian N. schrieb:> Für den Anfang reicht doch ein 8 bit Controller vollkommen aus und> wenn> die Leistung nicht mehr ausreichen würde, kann man immer noch auf 32> bit umsteigen.
Warum sollte man so kompliziert anfangen? Verschiedene Speichermodelle,
eingeschränkte Compiler... gibt es irgendeinen Grund außer nostalgische?
Matthias schrieb:> Warum sollte man so kompliziert anfangen?
weil das Datenblatt einfacher und übersichtlicher ist. D
> Verschiedene Speichermodelle,> eingeschränkte Compiler... gibt es irgendeinen Grund außer nostalgische?
und das gibt es wohl bei den 32bitter nicht?
einen 8bitter kann man für kleine dinge mal schnell in ASM
Programmieren, dabei lernt man wie genau ein µC arbeitet. Das wissen
kann man später immer gebrauchen.
Und an der Frage sieht man ja schon, das er gar nicht weiß wie so ein µC
arbeiten und Programmiert wird.
Peter II schrieb:> einen 8bitter kann man für kleine dinge mal schnell in ASM> Programmieren,
Der OP wollte das Ding aber in C oder C++ programmieren. Und damit ist
man auch nur schnell, wenn bereits Assembler für den Typen beherrscht.
> dabei lernt man wie genau ein µC arbeitet. Das wissen> kann man später immer gebrauchen.
Aber nur, wenn man exakt die gleiche µController später noch mal
programmiert. Oder gibt es so etwas wie 8051-Assembler nach ARM
compiler?
Peter II schrieb:> Matthias schrieb:>> Warum sollte man so kompliziert anfangen?> weil das Datenblatt einfacher und übersichtlicher ist. D
Mit diesen Details will sich der TO nicht herumschlagen.
Torsten Robitzki schrieb:> Aber nur, wenn man exakt die gleiche µController später noch mal> programmiert. Oder gibt es so etwas wie 8051-Assembler nach ARM> compiler?
es geht um die funktionsweise nicht um eine konkrete Sprache.
Christian N. schrieb:> Einlesen muss er sich trotzdem, egal ob er jetzt 8 oder 32 bit nimmt
Die Frage ist nur - worein?
API Beschreibung oder Prozessorhandbuch.
Und bei der API Beschreibung eines fix und fertig Paketes, wie vom TO
angefragt, dürfte die Bitzahl sogar irrelevant sein. Da hast Du recht.
Ach jetzt kommt wieder die 8Bit Fraktion hervorgekrochen. Ka was ihr
immer damit habt, dass diese Controller einfacher wären. Insbesondere
bei eurem Vorgehen, muss man sich ja doch wieder mit den Registern und
internas der Controller herumschlagen. Warum dann nicht gleich auf was
modernerem aufsetzen, das einem mehr bietet?
Aber - einmal mehr - geht es in diesem Thread nicht um 8Bit vs. 32Bit,
sondern um die Programmiermöglichkeiten auf einem möglichst hohem
abstraktionsniveau.
Nach kurzem einlesen in die Materie würde ich dem OP inzwischen auch zu
mbed oder arduino raten.
Und kommt jetzt nicht mit der Performance, um das gehts nämlich auch
nicht.
in diesem Zusammenhang habe ich noch was von yocto-project gehört...
Ich verstehe gerade nicht, was das ist und wie,wo,wann dies zur
Anwendung kommt.
Kennt das jemand?
Ja ich arbeite aktiv mit Yocto. Das ist ein Ecosystem, womit du dein
eigenes Linux für embedded sachen zusammenstellen kannst.
Wie gesagt ungeeignet für Cortex-M, dafür für Cortex-A.
Es gibt meines Wissens auch ports für den Raspberry oder das BeagleBone,
aber Yocto würde ich mir in meiner Freizeit nicht antun. Dann lieber die
Register eines µC Lernen, als stundenlang in configfiles wühlen.
operator schrieb:> Aber - einmal mehr - geht es in diesem Thread nicht um 8Bit vs. 32Bit,> sondern um die Programmiermöglichkeiten auf einem möglichst hohem> abstraktionsniveau.
das hast du aber nett formuliert.
Ich sag das mal etwas handfester: Es geht um die Suche nach dem Eingang
zu dem Lande, wo einem die gebratenen Bits von selbst in die Firmware
fliegen.
W.S.
In gewisser Weise steckt in der Frage selbst ein Widerspruch:
1. Einerseits willst Du, das eine API, Library etc. viel an Details vor
Dir verbirgt. Andererseits fragst Du dann bei Vorschlägen nach, ob auch
dieses oder jenes enthalten ist.
2. Verwechselst Du den ARM Cortex (Cortex heisst soviel wie "Kern") mit
der Peripherie. Es gibt für die Interrupt-Steuerung ein paar Register,
soviel haben alle Kerne einer Serie gemeinsam. Aber die Peripherie ist
je nach Hersteller und Typ völlig unterschiedlich - oder ist es
jedenfalls im allgemeinen.
Die Frage ist am Anfang zunächst nicht, wie man mit möglichst wenig
Aufwand alles erreicht, sondern mit soviel Aufwand wie nötig ein paar
kleine Dinge. Und die Frage ist nicht, wie man selbst bei diesen kleinen
Dingen, so wenig wie möglich lernen muss, sondern wie man bei diesen
Kleinen Dingen soviel wie möglich lernt. Wenn nämlich Effizienz die
Priorität ist, dann nimmt man sich einen Profi, der das für einen
erledigt, der weiss schon soviel aus langen Jahren, dass er sich bei
einer neuen Sache auf das Notwendige beschränken kann, weil der Rest aus
seinem Erfahrungsschatz kommt.
Was willst Du eigentlich erreichen? Darüber solltest Du mal
ausführlicher schreiben.
Willst Du neugierhalber mal einen uC programmieren? Dann fange lieber
mit einem AVR an, oder wenn nun, aus emotionalen Gründen, ein ARM Dein
Traum ist, dann nimm eines der kleinen Discovery-Boards von STM. Die
sind auch mit einem simplen USB-Kabel zu programmieren, weil sie einen
Bootloader haben.
Hast Du ein bestimmtes Projekt im Kopf und bist aber Anfänger? Dann
führt kein Weg daran vorbei die Grundlagen zu lernen oder eben einen
Profi zu engagieren. Es ist ein Trugschluss, zu meinen, dass eine
Library auch dem Anfänger gestattet, komplexe Mechanismen zu
beherrschen. Vielmehr sind solche Libraries vor allem dazu da, dem
Erfahrenen, der das, zumindest nach der Datenblattlektüre, mit
Bitfummelei auch selbst könnte, die Arbeit zu erleichtern. Solche
Libraries muss man vor allem erstmal verstehen. Sie dienen nicht dazu
und können es auch nicht, Dich vor dem Lernen zu schützen. :-)
Diese Arduino Dinger haben den Anspruch das zu können. Wenn Du hier aber
mal einige Beiträge dazu liest, dann scheitern sie an der Komplexität
der Materie. Um mal eben einige LEDs abhängig von ein paar Tastern oder
auch einem Sensor zu schalten, dafür reicht das Klicki-Bunti-Zeug. Aber
"Verständnis" für die Sache soll das nicht vermitteln - es tut es
jedenfalls nur sehr oberflächlich.
Man darf auch nicht vergessen, dass die Kontrolle der Peripherie nur ein
Teil der Sache ist. Das "algorithmische Denken" ist ein wesentlicher
weiterer Teil, der Dir hauptsächlich Probleme machen wird.
Also: Erzähle mal genauer wer Du bist, was Du machst, was Du erreichen
willst. Und zwar aus der Vogelperspektive. Sich gleich auf einen
Prozessor oder einen Abstraktionsniveau festzulegen ist völlig sinnlos.
Wie auch immer: Viel Erfolg jedenfalls.
Hallo Klaus,
vielen Dank für Deine Antwort, die in sehr vielem auch meinen
Erfahrungen und Ansichten entspricht.
Es ist schade, dass solche wichtigen Beiträge hier im Forum in der Flut
von Anfänger- und Dilettanten- Problemen untergehen. (Unter Dilettanten
verstehe ich hier diejenigen, die ohne sich vorher irgendwo informiert
zu haben, dieses Forum mit irgendwelchen unsinnigen Fragen zumüllen.)
Siehe auch
Beitrag "Forum "Anfänger / Einsteiger""
Zurück zum Anliegen des TO: Ich kann verstehen, dass z.B. ein Künstler
nicht unbedingt das "Bitgeflüster" bis ins Letzte verstehen muss, nur um
eine Licht-Installation ansprechend zu gestalten.
Und hier setzt das (von Dir und anderen als Klicki-Bunti-Zeug
verunglimpfte) Arduino- Projekt an. Auch der Nicht- Fachmann soll in
die Lage versetzt werden, mit wenigen Grundkenntnissen seine Ziele zu
erreichen.
(Da hat mich Autor epikao (Gast) etwas verblüfft mit der Frage nach dem
CAN- Bus...) Offenbar weiß er auch, was ein Interrupt ist. Er ist also
kein Anfänger.
Wie auch immer: Deine weisen Worte haben ihn nun verscheucht...
DH1AKF K. schrieb:> Wie auch immer: Deine weisen Worte haben ihn nun verscheucht..
ne, eher weil dies wohl schlicht weg nicht existiert? Eigentlich
schade...
Auf dem PC kann man auch per z.B C++ ohne CPU-Hardware, Register, Flag
etc. Kenntnisse Programme schreiben, die sogar USB, Ethernet etc.
ansprechen.
Nur mit dem PC ist halt keine Echtzeit möglich. Cortex M basierte
Mikrocontroller können wie ein PC Ethernet, USB etc. ohne Mühe
ansprechen und würden Echtzeit ermöglichen.
Der Arduino Duo scheint mir der richtige Ansatz... nur schlecht gelöst,
da scheinbar zu langsam. Ich vermute wegen Java?
Schade, dass man in dieser Hinsicht das Rad immer wieder neu erfinden
muss (d.h. immer bis in die Bit, Speicherbänken/ Ebenen einsinken)
Danke
Hallo "epikao" !
Jetzt möchte ich Dir mal einen ganz anderen Ansatz bei der Umsetzung der
Cortex M - Vorgaben vorstellen: PSoC (PSoC5LP) von Cypress. Ich
beschäftige mich seit drei Jahren mit diesen Schaltkreisen, denn sie
vereinigen analoge und digitale Baugruppen, die ich für mein Funk- Hobby
nutzbringend verwenden kann.
Auf den Abbildungen sind (fast) sämtliche verfügbaren Baugruppen zu
sehen, die Vielzahl ist zunächst verwirrend, und ohne Grundkenntnisse
der Elektronik nicht beherrschbar.
Zu jedem Funktionsblock gibt es als Firmware eine API, mit mindestens
einem Initialisierungs- und mehreren Funktionsaufrufen. Wer will, kann
auch auf der untersten Port- Ebene programmieren.
Zur Programmentwicklung gibt es eine kostenlose IDE, die auch einen
grafischen Schaltplan- Editor enthält.
Aber ohne Einarbeitungsaufwand, (alles ist in C geschrieben, alle
Dokumentationen englisch) geht es nicht.
Einziges Manko: "Nur" Cortex M3, also ohne Gleitkomma-Einheit.
epikao schrieb:> Auf dem PC kann man auch per z.B C++ ohne CPU-Hardware, Register, Flag> etc. Kenntnisse Programme schreiben, die sogar USB, Ethernet etc.> ansprechen.>> Nur mit dem PC ist halt keine Echtzeit möglich. Cortex M basierte> Mikrocontroller können wie ein PC Ethernet, USB etc. ohne Mühe> ansprechen und würden Echtzeit ermöglichen.
Jetzt definiere doch erstmal, was du im konkreten Falle unter "Echtzeit"
verstehst.
Ganz allgemein gilt: Echtzeit-Verarbeitung ist, wenn die Kiste, die die
Daten verarbeitet und drauf reagiert, schneller ist als die Daten
hereinrauschen. Und da ist auch ein jeder PC - selbst der langsamste -
ohne weiteres echtzeitfähig, wenn es sich nur um entsprechend landsame
Sachen handelt. Also z.B. jede Sekunde einmal die Uhrzeit von nem
GPS-Empfänger per COM-Port mit 2400 Baud reinholen und die Systemzeit
danach stellen.
Ansonsten siehst du die ganzen Peripherie-Zugriffe falsch: Du kannst auf
dem PC weder mit C++ noch mit was anderem auf USB, Ethernet etc.
zugreifen. Stattdessen kannst du auf Dienste des Betriebssystems
zugreifen - und das Betriebssystem ist es, was die eigentliche Arbeit
mit der Peripherie im Hintergrund erledigt.
Wenn du nun auf einem µC genau so wie auf dem PC programmieren willst,
dann brauchst du zwingend ein Betriebssystem was das alles bietet,
anders geht es nicht. Für alle µC ohne MMU sieht das mit bekannteren
Betriebssystemen mau aus, allenfalls müßtest du dich enlesen in sowas
wie QNX, Embos, Euros und Konsorten, da gibt es m.W. Zeugs, was ohne MMU
auskommt. Aber was dort an Leistungen dabei ist, mußt du selber
herauskriegen.
Wenn du nun aber OHNE Betriebssystem auskommen willst, wie viele Leute
hier, dann mußt du dich von deinem Anspruch trennen, denn dann ist
Beschäftigung mit der konkreten Hardware angesagt. Die meiste Zeit
verbringen so ziemlich alle µC-Programmierer mit dem Entwerfen von
Peripherie-Treibern - und alle Resultate dieser Bemühungen sehen mehr
oder weniger speziell und eigen aus, da ist Verstehen der Funktionalität
und Anpaßarbeit angesagt.
epikao schrieb:> also die tiefen Schichten wie Treiber, OS etc. sollten schon vorhanden> programmiert sein...
Ja, Rückschau auf deine Eröffnung. Leg dir ein fertiges Board mit nem
bekannten OS drauf zu, was dir das Gesuchte bietet. Vielleicht ist ein
ausgedientes Navi genau das Richtige. Zumindest stimmt dort schon der
Großteil der Peripherie.
W.S.
Ergänzung zu den PSoC- Controllern:
Beschaffungspreis für ein PSoC5LP- Kit mit abtrennbarem
Degugger/Programmer:
83,20€ für 8 Stück (Mouser).
Mit dem kleinen selbstgestrickten Entwicklungssystem (rechtes Foto)
möchte ich das Zusammenspiel zwischen PSoC5LP (CortexM3) und dem
Teensy3.1 (Cortex M4) erproben. In Stichworten: Kinetis K20 - 72 MHz,
USB, Scalable, Serial Communication Microcontrollers
Der folgende Link verweist auf das RTOS, ein auch für PSoC5 verwendbares
Betriebssystem:
http://electronicdesign.com/embedded/rtos-targets-psoc-5
Aber damit habe ich noch keine Erfahrungen.
Andreas Richter schrieb:> Wie schon geschrieben, dafür ist CMSIS für die Cortexe da.
CMSIS deckt doch nur den Teil ab der überall identisch ist, also den ARM
core und die Handvoll Funktionen die sich direkt damit beschäftigen, zum
Beispiel den Interrupt-Controller oder den Systick Timer.
> Damit kann man z.B. einen Ausgang so setzen:> GPIOSetDir()
Aber nur bei einem einzigen Hersteller und beim nächten gehts dann schon
wieder komplett anders, weil sich das nämlich aufgrund der sehr
unterschiedlich aufgebauten Hardware niemals auf einen Nenner bekommen
lässt, somit auch nicht spezifiziert ist und daher jeder sein eigenes
Süppchen kocht.
Unterm Strich spielt das aber gar keine Rolle weil man ja irgendwann
seine Lieblings-Controllerfamilie gefunden hat, nach nicht allzulanger
Zeit hat man sich da soweit reingefuchst daß man sich halbwegs sicher
zurechtfindet und man wechselt ja auch nicht ohne Not jeden Tag den
Controller. Und wenn man sich noch halbwegs Mühe gibt diese Hardware-
oder Herstellerspezifischen Teile nicht kreuz und quer in seinen eigenen
Code reinsickern zu lassen sondern all diese Dinge einigermaßen getrennt
hält dann kann mans auch später leichter portieren wenn das doch mal
nötig werden sollte.
epikao schrieb:> Schade, dass man in dieser Hinsicht das Rad immer wieder neu erfinden> muss (d.h. immer bis in die Bit, Speicherbänken/ Ebenen einsinken)
Das Rad wird man nicht neu erfinden müssen. Nur seinen Teil an der Open
Source leisten.
Bernd K. schrieb:> CMSIS deckt doch nur den Teil ab der überall identisch ist, also den ARM> core und die Handvoll Funktionen die sich direkt damit beschäftigen, zum> Beispiel den Interrupt-Controller oder den Systick Timer.
Dann schau dir mal CMSIS Driver an. Dort wird zumindest bei den
Standardperipherien eine einheitliche schnittstelle geschaffen....
@epikao Schreib doch einfach mal konkret, welches Board du schon hast
und was du genau machen willst. CAN und echtzeit sind einfach
schlagworte, aber was ist dein genaues Ziel?
Was ist deine Vorbildung? Kannst du schon irgendwie Code hochladen? Oder
musst du noch bei null anfangen? Wie sind deine C(++) Kentnisse?
noreply@noreply.com schrieb:> Nö.
hmm arduino bietet da wirklich viel...
und sorry, ist ja in C geschrieben.. also wieso oder für welche
Anwendungen ist Arduino z.B. zu langsam?
Mathias schrieb:> @epikao Schreib doch einfach mal konkret, welches Board du schon hast> und was du genau machen willst. CAN und echtzeit sind einfach> schlagworte, aber was ist dein genaues Ziel?> Was ist deine Vorbildung? Kannst du schon irgendwie Code hochladen? Oder> musst du noch bei null anfangen? Wie sind deine C(++) Kentnisse?
Kein konkretes Projekt. Ich möchte mich in einem leistungsstarken
verbreiteten Controller Hardware (mit Funktionen wie USB, Ethernet, CAN
Bus, Powerline-Bus, mehreren I/O's, A/D's, D/A's) einarbeiten und alles
eben möglichst auf einer hohen Ebene programmierbar...
Kenntnisse habe ich nur in C beim Atmega8 und Attiny45...
epikao schrieb:> also wieso oder für welche> Anwendungen ist Arduino z.B. zu langsam?
langsam stammt nicht von mir, ;-)
Aber wer stellt nachfolgende Funktionsaufrufe bereit.
// initialize the library instance
GPRS gprs;
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSMServer server(80); // port 80 (http default)
Quelle: http://www.arduino.cc/en/Tutorial/GSMExamplesWebServer
operator schrieb:> Nach kurzem einlesen in die Materie würde ich dem OP inzwischen auch zu> mbed oder arduino raten.>> Und kommt jetzt nicht mit der Performance, um das gehts nämlich auch> nicht.
gemäss dieser Aussage, scheint es mit Arduino Probleme mit der
Performance zu geben.... aber keine Ahnung was man damit meint??
Weiss ich auch nicht, kenn ich nur vom höhrensagen. Habe nie mit Arduino
gearbeitet, aber habe mir einmal ein board für mbed gekauft und
angetestet:
Beitrag "mbed - Ein Erfahrungsbericht"
Scheint eigentlich genau das zu sein was du suchst (und ich auch ;-) )
Edit:
Noch zur Performance: Bei diesen Bibliotheken werden vermutlich mehrere
Funktionsaufrufe nötig sein, wofür man aber auch lediglich 1-2
Prozessortakte brauchen könnte. Ebenfalls benötigt das gesamte Programm
im Endeffekt erheblich mehr Flash. Das wird wohl mit Peformance gemeint
sein.
Aber die eigentlichen Berechnungen dürften nicht mehr/weniger Zeit
beanspruchen. Lediglich die Peripherieansteuerung.
Operator S. schrieb:> Beitrag "mbed - Ein Erfahrungsbericht">> Scheint eigentlich genau das zu sein was du suchst (und ich auch ;-) )>> Edit: Noch zur Performance: Bei diesen Bibliotheken werden vermutlich> mehrere Funktionsaufrufe nötig sein, wofür man aber auch lediglich 1-2> Prozessortakte brauchen könnte
vielen Dank. Hab mal kurz reingeschaut. Ist mbed quasi eine effizientere
Alternative zu Arduino?... die Arduino Bibliotheken sind wohl nicht
kompatibel..
epikao schrieb:> mbed quasi eine effizientere> Alternative zu Arduino?
"Effizienz" ist so ne Sache. Meinst du Anzahl Takte zur Ausführung? Oder
belegter Speicherplatz bei gleicher Funktion? Denn gerade Speicher ist
im Embedded Bereich wertvoll.
Ich würde aber davon ausgehen, dass die mbed enabled Komponenten
schneller sind als deren Arduino pendant. Allein schon durch den
deutlich höheren Takt und die 32Bit Verarbeitung sollte dies gegeben
sein.
Was aber eigentlich viel eher für mbed statt arduino spricht: Mit mbed
hast du eine zeitgemässe Grundlage der Controller. Dadurch stehen dir
vermutlich durchs Band bessere Peripheriebausteine zur Verfügung (12Bit
ADC, USB, Ethernet, um nur einige zu nennen) womit du fürs gleiche Geld
mehr erhältst. Ausserdem ist die Lizenz permissiver, falls das für dich
ein Grund sein sollte, kann aber auch sein, dass wir da andere
Prioritäten haben.
Anmerkung: Bei Arduino gehe ich immernoch von den Atmega Derivaten aus.
Für einen direkten Vergleich würde sich eigentlich die Arduino Due
Plattform und einem aus mbed anbieten, um nur die Libraries
gegeneinander antreten zu lassen.
Operator S. schrieb:> "Effizienz" ist so ne Sache. Meinst du Anzahl Takte zur Ausführung? Oder> belegter Speicherplatz bei gleicher Funktion?
beides ;-)
Operator S. schrieb:> Für einen direkten Vergleich würde sich eigentlich die Arduino Due> Plattform und einem aus mbed anbieten, um nur die Libraries> gegeneinander antreten zu lassen.
ja, das wäre mal interessant...
ich will mich in die Plattform einarbeiten, die effizienter, langlebiger
(verbreiteter), und am ehesten Zukunft hat. Ziel ist die Programmierung
verschiedenster Industrie-Anwendungen, oder Anwendungen wo z.B. viel
(teure) SPS eingesetzt wird.
epikao schrieb:> "Effizienz" ist so ne Sache. Meinst du Anzahl Takte zur Ausführung? Oder> belegter Speicherplatz bei gleicher Funktion?
aber Anzahl Takte ist natürlich wichtiger
>ich will mich in die Plattform einarbeiten, die effizienter, langlebiger>(verbreiteter), und am ehesten Zukunft hat. Ziel ist die Programmierung
Das wird nicht die letzte Plattform sein, in die Du Dich vor der Rente
einarbeiten musst.
Insofern kannst Du das ganz entspannt sehen....
epikao schrieb: (viel)
> Ich möchte mich in einem leistungsstarken verbreiteten> Controller Hardware (mit Funktionen wie USB, Ethernet, CAN> Bus, Powerline-Bus, mehreren I/O's, A/D's, D/A's) einarbeiten und alles> eben möglichst auf einer hohen Ebene programmierbar...> Kenntnisse habe ich nur in C beim Atmega8 und Attiny45...> ich will mich in die Plattform einarbeiten, die effizienter, langlebiger> (verbreiteter), und am ehesten Zukunft hat. Ziel ist die Programmierung> verschiedenster Industrie-Anwendungen, oder Anwendungen wo z.B. viel> (teure) SPS eingesetzt wird.
Nichts ist automatisch effizient. Zudem steht Effizienz im direkten
Widerspruch zu Bequemlichkeit, die Du suchst ... und Dein
Anwendungszweck steht ebenfalls im Widerspruch zur Bequemlichkeit.
Wenn ich sehe, wie viel Zeit Du mit der oberflächlichen und banalen,
völlig inkonkreten "Diskussion" hier verplemperst, anstatt mit STM32
oder LPC anzufangen, (Du wärst mit den behaupteten C-Kenntnissen auf
ATMEGA also schon längst über das Blinken hinaus) wird das wohl auch in
Zukunft nichts mit Effizienz werden ...
nachdenklicher schrieb:> Wenn ich sehe, wie viel Zeit Du mit der oberflächlichen und banalen,> völlig inkonkreten "Diskussion" hier verplemperst, anstatt mit STM32> oder LPC anzufangen,
vorhin hatte ich keine Ahnung von diesen Begriffen etc.
Es ging mir darum eine Übersicht zu verschaffen... und den Aufwand
abzuschätzen.
Da haben mir nun diverse Kommentare sehr geholfen.