mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RaspberryPi - Programmieren mit C - Starthilfe


Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich programmiere schon einige Jahre AVR µCs und hab nun schon seit einer 
geraumen Zeit einen Raspberry hier herum liegen. Nun wollte ich das Ding 
auch mal in Gebrauch nehmen.

Das auf dem Raspberry Linux läuft ist mir bewusst, ich habe leider mit 
Linux noch nicht so viel Erfahrungen sammeln können.

Wäre es denn möglich, wie bei einem AVR oder einem anderen µC den ARM 
Cortex-A7 auch direkt Hardwarenah zu programmieren? Was benötige ich da? 
Gibt es im Nutz einige Ressourcen wo ich mich da ein wenig einlesen 
kann? Oder bin ich da immer zwingend auf ein "Betriebssystem" 
angewiesen?

Vielen Dank schon mal im vor raus.:-D

Autor: PittyJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst du auf das Betriebssystem verzichten?
Crosscompilieren und ein Bootimage erstellen ist doch wesentlich 
komplizierter, als sich einzuloggen und gcc aufzurufen.

Ob du nun einen Editor unter Windows aufrufst, oder unter Linux, dass 
ist doch gehupft wie gesprungen. Selbst die Tataturkürzel sind gleich.


Es gibt Anleitungen für Bare Metal im Netz. Doch wenn du nicht einmal 
Linux bedienen kannst, könnte das auch schon zu kompliziert sein.
Lern Linux, das ist was fürs Leben. Ich benutze das schon 23 Jahre lang.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Pitty für den Hinweis, jedoch würde ich Linux erstmal bei Seite 
lassen wollen. Ich will die Grundzüge des ARM lernen. Bare Metall war 
aber der richtige Hinweis, danke dafür. Crosscompiling und 
Image-Erstellung sehe ich erstmal nicht so kompliziert. Da nimmt einen 
ARM-GCC schon sehr viel ab.

Gewisse Grundzüge von Linux kenne ich ja, so ist das nicht, da kommt man 
ja nicht drumherum (bin nun auch seit 89 vorm Rechner), aber außer 
Server aufzusetzen und zu warten mache ich da eigentlich nicht viel. 
Produktiv setze ich das System nicht ein, und möchte es eigentlich auch 
nicht.

Autor: Christopher J. (christopher_j23)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Draco schrieb:
> Das auf dem Raspberry Linux läuft ist mir bewusst, ich habe leider mit
> Linux noch nicht so viel Erfahrungen sammeln können.
>
> Wäre es denn möglich, wie bei einem AVR oder einem anderen µC den ARM
> Cortex-A7 auch direkt Hardwarenah zu programmieren? Was benötige ich da?
> Gibt es im Nutz einige Ressourcen wo ich mich da ein wenig einlesen
> kann?

Unter Linux nah an der Hardware zu programmieren bedeutet schlicht und 
einfach Module bzw. Treiber für den Kernel zu schreiben. Leider ist das 
nicht so übersichtlich wie bei den AVRs, was unter anderem dem Umstand 
geschuldet ist, dass der Kernel von der 200Mhz MIPS-Kiste über Mehrkern 
Cortex-A oder AMD64 bis hin zu irgendwelchen Clustern mit zigtausend 
Prozessoren läuft, d.h. die Abstraktionsebene ist entsprechend größer.

Es gibt von Greg Kroah-Hartmann ein sehr umfassendes Buch namens "Linux 
Device Drivers" was online frei erhältlich ist. Es ist leider 
mittlerweile deutlich veraltet und einige Dinge haben sich seitdem 
(2005!) geändert, wenn auch nicht alle. Es geht jedoch keineswegs auf 
den Raspberry Pi im speziellen ein (wie auch?). Dafür kann ich aber 
persönlich das Buch "Embedded Linux lernen mit dem Raspberry Pi" von 
Jürgen Quade empfehlen. Dort wird alles vom Grundlegenden Aufbau von 
Linux, über etwaige Bootloader wie U-Boot bis hin zum Crosscompiling des 
ersten eigenen Kernels erklärt. Das Buch ist relativ kurz aber dafür 
knackig geschrieben. Es ist sicher nichts für Lieschen Müller die mit 
Python mal eine LED blinken lassen möchte aber wenn du Erfahrung mit C 
auf AVR und/oder ARM hast und bereit bist dich da reinzulesen, dann 
sollte das schon passen.

Von Bare-Metal auf Cortex-A würde ich jedoch erstmal Abstand nehmen und 
wenn überhaupt, dann eher auf einem Beaglebone als auf einem RPi.  Da 
ist der Prozzi einfach deutlich besser dokumentiert. Dort hat man jedoch 
wieder zwei 32bit Coprozessoren (PRUs) die am gleichen DDR3 hängen wie 
der Cortex-A und die sich prima wie ein AVR "bare metal" programmieren 
lassen. Über shared memory kannst du dann mit niedriger Latenz über die 
PRUs Daten (aus GPIO, I2C, SPI, CAN, usw) in den RAM schieben oder aus 
dem RAM auf die Schnittstellen schicken. Dafür musst du dann jedoch auch 
wieder eigene Kerneltreiber schreiben ;)

PittyJ schrieb:
> Lern Linux, das ist was fürs Leben. Ich benutze das schon 23 Jahre lang.

Dem kann ich mich nur anschließen, auch wenn es bei mir erst ca. 5 Jahre 
sind. Es gibt nicht viele Dinge in der IT-Welt die so konstant sind wie 
Linux. Mit den Linuxkenntnissen von heute kannst du auch garantiert in 
10 Jahren noch was anfangen.

Edit:
Wenn du den Cortex-A "bare metal" betreibst schmeißt du meiner Meinung 
nach einfach zu viele Dinge weg, die du mit Linux quasi geschenkt 
bekommst, wie z.B. Unterstützung für verschiedenste Dateisysteme, einen 
brauchbaren Netzwerkstack, einen Scheduler sowie die Speicherverwaltung 
und das alles um im besten Fall eine bessere Latenz zu bekommen. Das 
lohnt sich aus meiner Sicht einfach nicht. Wenn du eine niedrige Latenz 
haben willst, dann nimm einen Cortex-M und programmiere ohne OS. Mit den 
preempt-rt Patches sind aber auch beim Linux Kernel maximale Latenzen 
von 140µs machbar. Für den Beaglebone gibt es da schon fertige Images 
und seit kurzem (soweit ich weiß) auch für den RPi.

: Bearbeitet durch User
Autor: Planlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Draco schrieb:
> Ich will die Grundzüge des ARM lernen. Bare Metall

Das geht zwar irgendwie mit dem RPi, aber ich denke so ein billiges 
STM32-Discovery ist dafür um Welten besser geeignet.

der RPi-Prozessor ist eigentlich ein Video- und Grafik-Prozessor mit 
einem ARM-Hilfsrechenknecht nebendrann, und damit schon von der Hardware 
bald soweit von "Bare Metal ARM" entfernt, wie nur irgendwie möglich.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Planlos schrieb:
> der RPi-Prozessor ist eigentlich ein Video- und Grafik-Prozessor mit
> einem ARM-Hilfsrechenknecht nebendrann, und damit schon von der Hardware
> bald soweit von "Bare Metal ARM" entfernt, wie nur irgendwie möglich.

Zickt nicht auch der Hersteller  bzgl. Support rum?
STM32 sind doch ganz schön verbreitet...

Autor: Christopher J. (christopher_j23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer schrieb:
> Zickt nicht auch der Hersteller  bzgl. Support rum?
> STM32 sind doch ganz schön verbreitet...

Ja da hat sich Broadcom bisher nicht gerade mit Ruhm bekleckert. 
Ebenfalls ein Grund, den BB dem RPi vorzuziehen, wenn man irgendetwas 
mit Hardware machen möchte. STM32 wäre bei bare metal jedoch meine erste 
Wahl. Die F7 haben zum Teil sogar native 64bit FPUs am Start.

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Raspi würde ich sowas auch nicht angehen; wenn schon, dann wie 
andere schon schrieben auf Linux Treiberebene. Sich da Wissen anzueignen 
ist sicherlich nicht verkehrt und Zukunftsweisender als jedes Detail 
über den ARM selbst zu lernen.

Alternativ zu einem STM32 Board, kannst Du auch das MSP432 Launchpad von 
TI nehmen (MSP432 hat einen ARM Cortex M4F Kern drin):
http://www.ti.com/tool/msp-exp432p401r
Kostet um die USD 12.- und hat alles drauf was man so braucht zum 
einsteigen (RGB LED, Taster, JTAG interface, Speisung (per USB), 
Debugger, Strommessung, I/O's herausgeführt, Back-channel UART via USB 
zum PC...)

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt nichts, was es nicht gibt:

http://www.valvers.com/open-software/raspberry-pi/...

Ob's sinnvoll ist, ist eine andere Frage.

Die stellt sich m.E. bei einem Hobby nicht. Wenn's aber doch sein muß, 
würde ich persönlich Raspi-Bare-Metal-Programmierung jedenfalls 
bezüglich der Sinnhaftigkeit noch über Briefmarkensammeln und Angeln 
einordnen.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> Ob's sinnvoll ist, ist eine andere Frage.
>
> Die stellt sich m.E. bei einem Hobby nicht.

Naja, auch bei einem Hobby verfolgt man ja ein bestimmtes Ziel. Sinnvoll 
ist dann, das zu tun, mit dem man diesem Ziel zumindest näher kommt.

> Wenn's aber doch sein muß, würde ich persönlich Raspi-Bare-Metal-
> Programmierung jedenfalls bezüglich der Sinnhaftigkeit noch über
> Briefmarkensammeln und Angeln einordnen.

Beim Angeln kann man das Ergebnis wenigstens grillen und verspeisen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.