www.mikrocontroller.net

Forum: PC-Programmierung Hardware IO unter Linux und C


Autor: Cloud Strife (Firma: S.) (gobliins)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Community,

seid ein paar Wochen beschäftige ich mich mit der Programmierung von 
eingebetteten systemen und Mikrokontrollern. Ich besitze ein 
AT91SAM9RL-EK und habe schon einige bare-metal Programme (LEDs 
ansteuern, Interrupts durch Taster am Board auslösen) in C geschrieben 
und auf dem board laufen gehabt.

Nun läuft auf meinem Board als OS ein Linux 2.6.3 buildroot.
Wie kann ich denn nun meine LEDs wieder ansprechen oder auf Hardware 
Interrupts (Taster) reagieren?

Autor: Imon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cloud Strife schrieb:
> Hi Community,
>
> seid ein paar Wochen beschäftige ich mich mit der Programmierung von
> eingebetteten systemen und Mikrokontrollern. Ich besitze ein
> AT91SAM9RL-EK und habe schon einige bare-metal Programme (LEDs
> ansteuern, Interrupts durch Taster am Board auslösen) in C geschrieben
> und auf dem board laufen gehabt.
>
schön dann hast du ja fast alles was du brauchts ;-)

> Nun läuft auf meinem Board als OS ein Linux 2.6.3 buildroot.
> Wie kann ich denn nun meine LEDs wieder ansprechen oder auf Hardware
> Interrupts (Taster) reagieren?

Hi,
du hast wirklich einen 2.6.3 Kernel am laufen ?

gib mal bitte auf der cmdline das folgende Kommando ein
 cat /proc/version

wenn das system mit 2.6.3 antwortet würde ich dir dringend ans herz 
legen dein linux als zu alt zu betrachten und mich nach was neueren 
umsehen
denn der Kernel 2.6.3 würde irgendwann 2004 bis 2005 fertig gestellt, 
ist also ganz gut abgehangen und dort hilfe zu bekommen ist echt nicht 
einfach.

was deine Fragen angeht. Die LEDs solltest du recht einfach ansteueren 
können. Finde heraus an welchen GPIOS sie hängen. dann kannst du mit
 echo <NR> > /sys/class/gpio/export

Die GPIOS zum export freigeben. dann musst du die entsprechenden GPIOS 
mit
echo out > /sys/class/gpio/gpio<NR>/direction

auf Ausgang stellen und mit Schalten.
echo 1 > /sys/class/gpio/gpio<NR>/value
echo 0 > /sys/class/gpio/gpio<NR>/value

Alternativ kannst du auch einen LED treiber für deine LEDS Schalten. Der 
Taster macht dir schon mehr probleme weil der einen Interrupt auslöst 
kannst du diesen leider nicht im Userspace direckt abfragen. Das ist der 
Nachteil an Linux auf ein embedded System. Hier wirst du wohl eine 
Treiber schreiben müssen welcher den Taster betreut. Dieser Stellt dann 
über denn input layer ein Event zur Verfügung welches von deinen 
Programm wahrgenommen wird.

Ich würde denn Taster einfach einen gültigen Tastertur code liefern 
lassen wenn er gedrückt wird kann kannst du mit allen Funktionen wie 
getc() und Co in dein Programm auf denn Taster warten und must dir keine 
gedanken machen wie der taster zu interpretieren ist. Ausserdem ist ein 
So geschriebenes Programm leicht zu Protieren und kann am PC getestet 
werden.
Das ist der Vorteil von Linux auf ein Embedded System.

Autor: Cloud Strife (Firma: S.) (gobliins)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi und danke für die Antwort,

also zu cat /proc/version :
Linux version 2.6.30 ... (gcc version 4.4.4 (Buildroot 2010.05) ) #1 Wed 
Dec 15 06:31:32 EST 2010

zu den LEDS
das Verzeichnis mit den Leds habe ich gefunden
/sys/class/leds
und über die von dir beschriebenen befehle die leds ein/aus geschaltet

zu den Taster / Interrupts
da ich ja ein buildroot von Atmel mit einer Konfiguration für mein board 
verwende könnte es sein das evtl auch schon ein treiber für die Taster 
mitinstalliert wurde, wie kann ich das denn prüfen?

Autor: vlad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cloud Strife schrieb:
> Linux version 2.6.30 ... (gcc version 4.4.4 (Buildroot 2010.05) ) #1 Wed

das sind aber 27 mehr als 3 ;)

Autor: Cloud Strife (Firma: S.) (gobliins)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vlad schrieb:
> Cloud Strife schrieb:
>> Linux version 2.6.30 ... (gcc version 4.4.4 (Buildroot 2010.05) ) #1 Wed
>
> das sind aber 27 mehr als 3 ;)

ups stimmt natürlich. Vor lauter lauter...

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.