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
:
Bearbeitet durch User
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?
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
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)?
Mit den google- Stichwörtern "arduino due can library" findest Du z.B.: https://github.com/collin80/due_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:
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 | }
|
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.
Einlesen muss er sich trotzdem, egal ob er jetzt 8 oder 32 bit nimmt
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?
Das ist ein Softwareprojekt zum erstellen von Linux Distributionen. Also ungeeignet für die CortexM Serie
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.
epikao schrieb: > Der Arduino Duo scheint mir der richtige Ansatz... nur schlecht gelöst, > da scheinbar zu langsam. Ich vermute wegen Java? Nö.
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.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.