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


von Draco (Gast)


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

von PittyJ (Gast)


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.

von Draco (Gast)


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.

von Christopher J. (christopher_j23)


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
von Planlos (Gast)


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.

von STK500-Besitzer (Gast)


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

von Christopher J. (christopher_j23)


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.

von Johnny B. (johnnyb)


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

von Markus F. (mfro)


Lesenswert?

Es gibt nichts, was es nicht gibt:

http://www.valvers.com/open-software/raspberry-pi/step01-bare-metal-programming-in-cpt1/

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.

von Rolf M. (rmagnus)


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.

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.