Grasshopper - Linux - direkte PORT Programmierung möglich ?

Gast #1236288
Hallo,

ich versuche durch ein kleines C Programm die LEDs direkt am Grasshopper 
zu programmieren. ( direkter Zugriff auf die HW )

Leider gibt es nur nen Segmentation Fault


#define PIOA (*(volatile unsigned *)0xFFE02800)
PIOA = ( (1<<23) | (1<<24) );


Sollte nach meinem Verständnis LED PA23 und PA24 einschalten.


Wer weis einen Rat ?

Gruß,

Mirko
Gast
Ohne jetzt die genauen Details zu kennen würde ich sagen das das aus dem 
Userspace NICHT funktioniert. Da muß man dann schon einen Kerneltreiber 
programmieren.
Den Segmentation Fault gibt es zu recht. Denn du hast den Sinn des 
Userspace nicht verstanden. Dein Programm läuft eben in diesem 
Userspace. Das heißt es hat nur eingeschränkte Rechte und kann nur auf 
den Speicher zugreifen, den es zugewiesen bekommen hat.
Versucht es, einen anderen Speicherbereich zu lesen oder zu schreiben, 
dann kommt eben ein Seg Fault.

Wenn du dir einen Kernel-Treiber programmierst, dann sind solche Aufrufe 
ohne weiteres möglich, da du dich im Kernel-Space befindest. Dann bist 
du aber auch dafür verantwortlich, dass der Treiber die Systemstabilität 
nicht beeinflusst.

MfG
Marius
Gast
per /dev/mem kann man per mmap nicht auf den Addressbereich von den gpio 
zugreifen :(

Ich veruchte nun den "einfachen weg"

Die LEDs sind an Port0 (A) PA23-PA30 angeschlossen.

#--------------------------------------------------------#
mkdir /config/gpio/leds

#specifies which PIO controller to use (PIOA = 0, etc.)
echo 0 > /config/gpio/leds/gpio_id

# specifies which particular pins to use on the controller.
echo 0xff00 > /config/gpio/leds/pin_mask     # Use pins PA23-PA31

# specifies which pins are used as outputs.
echo 0xff00 > /config/gpio/leds/oe_mask      # Enable output on pins 
23-31

# specifies whether the gpio object is active. Write "1" to this file in 
order to create the gpio device.
echo 1 > /config/gpio/leds/enabled         # Create the device

#---------------------------------------------------------#

Es wird nun aber laut dmesg kein /dev/gpio0 angelegt :(
Wenn ich es per Hand anlege mit mknod /dev/gpio0 c 254 0
und mit einem Programm darauf zugreifen will, passiert nichts.

$ cat /dev/gpio0
cat: /dev/gpio0: No such device or address
$ ls -al /dev/gpio0
crw-r--r--    1 root     root     254,   0 Dec 31 18:12 /dev/gpio0

Da weis ich nun nicht mehr weiter :(

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.