Hallo Experten! Bin Anfänger, daher wahrscheinlich für Euch einfach zu lösen: Ich schalte LEDs eines Boards mit "echo 1 > /dev/led1" oder "echo 0 > /dev/led1" an und aus. Wie sieht das ganze aus, wenn ich es in C programmieren will? fd=open("/dev/led1", WR_ONLY); write(fd, 1, 1); funktioniert leider nicht? Danke schonmal.
Pit schrieb: > fd=open("/dev/led1", WR_ONLY); > write(fd, 1, 1); > > funktioniert leider nicht? hätte es auch so gemacht, aber was heist > funktioniert leider nicht? geht das open schief, geht das write schief, bekommst du eine fehlermeldung, versteht es der compiler nicht?
das 'echo 1 > /dev/led1' schreibt zwei Zeichen nach /dev/led1: 0x31 0x0d Versuch also mal: write(fd, "1\n", 2);
Danke für die Antworten. Jetzt gehts. So muss es aussehen damits funktioniert: fd=open("/dev/led1", O_RDWR); write(fd, "1", 1); Also als erstes mal das Gerät zum Lesen und Schreiben öffnen, dann die 1 in Anführungszeichen. Danke!
Pit schrieb: > Also als erstes mal das Gerät zum Lesen und Schreiben öffnen, dann die 1 > in Anführungszeichen. 1 in Anführungszeichen ist ein String. Also mit \n terminiert. Der Gedanke CR schrieb: > write(fd, "1\n", 2); war also Richtig, nur das 0x31 und \0 (also 0x00) gesendet werden sollte
Nur aus Interesse: was verbirgt sich denn hinter "/dev/led1"? Eine (virtuelle) serielle Schnittstelle?
le x. schrieb: > was verbirgt sich denn hinter "/dev/led1"? > eine virtuelle Datei, die von einem süeziellen Kernelmodul verwaltet wird. Schreibt man in diese "Datei" etwas rein, setzt das Kernelmodul den "Dateiinhalt" in entsprechende I/O-Kommandos um. ...mal ganz populärwissenschaftlich ausgedrückt...
/dev/lde schrieb: > eine virtuelle Datei, die von einem süeziellen Kernelmodul verwaltet > wird. Schreibt man in diese "Datei" etwas rein, setzt das Kernelmodul > den "Dateiinhalt" in entsprechende I/O-Kommandos um. echo str_replace("ü", "p", $str); also ein handelsübliches character-device? ;-)
Faulpelze machen aus dem Dreizeiler open/write/close einen Einzeiler: system("echo 1 > ...")
A. K. schrieb: > Faulpelze machen aus dem Dreizeiler open/write/close einen Einzeiler: > system("echo 1 > ...") System ist böse, lernt man doch immer wieder ;-) ! Nebenbei ist das doch meher als Overkill. der Kernel muss eine kompletten Prozess ansetzen nur um eine "1" in ein Characater device zu schreiben. Wer so Optimiert, der hat ein an der Waffel ehrlich. Wenn man das öfter in einen Programm braucht, pack es in eine Funktion oder ein marco.
imonbln schrieb: > System ist böse, lernt man doch immer wieder ;-) ! > Nebenbei ist das doch meher als Overkill. Ich weiss auch nicht, ob ich das im produktiven Einsatz wirklich so machen würde. Aber eine Möglichkeit für quick-and-dirty wärs schon. Natürlich ist das Overkill. Der Punkt ist nur: Ab wann spielt Overkill eine Rolle? Wenn ich im Programm intensives Bitbanging betreibe, dann schon. Wenn ich anfangs einmal irgendeine Einstellung vornehme, dann spielt dieser Aspekt hingegen keine Rolle. Zum Thema Overkill habe ich ohnehin längst eine eher lockere Beziehung, da ich längst mehr in Perl als in C mache. Passt besser zu den Aufgaben, ist schneller fertiggestellt und in den allermeisten Fällen auch schnell genug.
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.