Forum: Mikrocontroller und Digitale Elektronik Cortex M freie Bibliotheken, API?


von epikao (Gast)


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

von Peter II (Gast)


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?

von operator (Gast)


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.

von Sina A. (sinapse)


Lesenswert?


von Andreas R. (andreasr)


Lesenswert?

> Ich stelle mir eine API? Entwicklungsumgebung vor, die mir alle Funktionen
> des Prozessor in einer Bibliothek bereitstellt..

Stichworte:
CMSIS
LPCOpen

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


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

von epikao (Gast)


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

von Timmo H. (masterfx)


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

: Bearbeitet durch User
von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


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

von epikao (Gast)


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?

von Frank K. (fchk)


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

von Mekkerer (Gast)


Lesenswert?

epikao schrieb:
> mit welchem Kabel wird der ARM
> programmiert ??


Mit dem WLAN-Kabel.

von epikao (Gast)


Lesenswert?

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?

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


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

: Bearbeitet durch User
von Christian N. (mugen2013)


Lesenswert?

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.

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

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...?

von Mathias (Gast)


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.

von W.S. (Gast)


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.

von epikao (Gast)


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)?

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

Mit den google- Stichwörtern "arduino due can library" findest Du z.B.:

https://github.com/collin80/due_can

von Steffen R. (steffen_rose)


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.

von Andreas R. (andreasr)


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
}

von hopfenlau (Gast)


Lesenswert?


von Matthias (Gast)


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?

von Peter II (Gast)


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.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


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?

von Steffen R. (steffen_rose)


Lesenswert?

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.

von Christian N. (mugen2013)


Lesenswert?

Einlesen muss er sich trotzdem,  egal ob er jetzt 8 oder 32 bit nimmt

von Peter II (Gast)


Lesenswert?

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.

von Steffen R. (steffen_rose)


Lesenswert?

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.

von operator (Gast)


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.

von epikao (Gast)


Lesenswert?

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?

von stefan (Gast)


Lesenswert?

Das ist ein Softwareprojekt zum erstellen von Linux Distributionen.
Also ungeeignet für die CortexM Serie

von operator (Gast)


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.

von W.S. (Gast)


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.

von Klaus (Gast)


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.

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


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...

von epikao (Gast)


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

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Angehängte Dateien:

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.

von W.S. (Gast)


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.

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Angehängte Dateien:

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.

von Bernd K. (prof7bit)


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.

von noreply@noreply.com (Gast)


Lesenswert?

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.

von noreply@noreply.com (Gast)


Lesenswert?

epikao schrieb:
> Der Arduino Duo scheint mir der richtige Ansatz... nur schlecht gelöst,
> da scheinbar zu langsam. Ich vermute wegen Java?

Nö.

von Nobody (Gast)


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....

von Mathias (Gast)


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?

von epikao (Gast)


Lesenswert?

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?

von epikao (Gast)


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...

von noreply@noreply.com (Gast)


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

von epikao (Gast)


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??

von Operator S. (smkr)


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.

: Bearbeitet durch User
von epikao (Gast)


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..

von Operator S. (smkr)


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.

von epikao (Gast)


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.

von epikao (Gast)


Lesenswert?

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

von edf (Gast)


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....

von nachdenklicher (Gast)


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 ...

von epikao (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.