Cortex M freie Bibliotheken, API?

Gast #4153564
Lesenswert?

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
Gast #4153567
Lesenswert?

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?
Gast #4153569
Lesenswert?

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.
(Firma: Torrox.de) #4153584
Lesenswert?

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
Gast #4153624
Lesenswert?

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
#4153630
Lesenswert?

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
(Firma: Torrox.de) #4153635
Lesenswert?

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
Gast #4153650
Lesenswert?

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?
#4153655
Lesenswert?

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
Persönliche Seite #4153720
Lesenswert?

Wenn Du "nicht so in die Tiefe" gehen willst, empfehle ich Dir:

http://www.arduino.cc/en/Main/ArduinoBoardDue

Darauf sitzt ein CORTEX M3 Prozessor, und die Software samt Bibliotheken 
ist frei verfügbar. Du brauchst zum Programmieren nur die Arduino- IDE 
und ein USB- Kabel. Ob Windows oder Linux ist egal.

Am Anfang würde ich aber erst mal ein Buch zu Rate ziehen.

Es gibt übrigens mehrere Foren, z.B.
http://www.arduinoforum.de/arduino-Forum-Programmierung

wo Dir geholfen wird.

Preis: ab 23€, z.B. hier:

http://www.ebay.de/itm/SainSmart-Due-SAM3X8E-32-bit-ARM-Cortex-M-100-Compatible-For-Arduino-DE-Stock-/221593871496?pt=LH_DefaultDomain_77&hash=item3398062488
Gast #4153846
Lesenswert?

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.
Gast #4154060
Lesenswert?

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.
Gast #4154129
Lesenswert?

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)?
#4154361
Lesenswert?

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.
#4154401
Lesenswert?

> 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:
1
// Set port for LED to output
2
GPIOSetDir( LED_PORT, LED_BIT, 1 );
3

4
// LED is on for 1st half-second
5
if ( bla )
6
{
7
    GPIOSetValue( LED_PORT, LED_BIT, LED_OFF );
8
}
9
// LED is off for 2nd half-second
10
if ( blabla )
11
{
12
    GPIOSetValue( LED_PORT, LED_BIT, LED_ON );
13
}
Gast #4154609
Lesenswert?

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?
Gast #4154616
Lesenswert?

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.
(Firma: Torrox.de) #4154624
Lesenswert?

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?
Gast #4154711
Lesenswert?

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.
Gast #4154831
Lesenswert?

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.
Gast #4155070
Lesenswert?

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.
Gast #4155096
Lesenswert?

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.
Persönliche Seite #4156375
Lesenswert?

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...
Gast #4159312
Lesenswert?

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
Persönliche Seite #4159378
Lesenswert?

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.
Angehängte Dateien:
Gast #4159435
Lesenswert?

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.
Persönliche Seite #4159468
Lesenswert?

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.
Angehängte Dateien:
#4159483
Lesenswert?

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.
Gast #4159651
Lesenswert?

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....
Gast #4159652
Lesenswert?

@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?
Gast #4159667
Lesenswert?

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...
Gast #4159696
Lesenswert?

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
Gast #4159804
Lesenswert?

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??
#4159805
Lesenswert?

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.
Gast #4160188
Lesenswert?

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..
#4160280
Lesenswert?

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.
Gast #4160311
Lesenswert?

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.
Gast #4160349
Lesenswert?

>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....
Gast #4160375
Lesenswert?

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 ...
Gast #4160388
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren