_self123 schrieb:
Das Programm bringt eine LED zum Blinken, indem es direkt physikalische Adressen aus dem Kernel-Space manipuliert. Genauer gesagt, werden die für die Register zuständigen GPIO Pins verändert. Da dies aus dem User Space nicht geht, wird (mit Root-Rechten) der entsprechende Teil des Speichers per mmap aus der Datei /dev/mem in den User Space gemappt. Vielleicht liegt es auch daran, dass ich das Programm bisher immer unsauber per CTRL+C abgebrochen habe.
Dann ist es kein Wunder das irgendwann was kaputt geht. Du schreibst vermutlich fröhlich im speicher rum.
Man kann auf GPIO Pins auch vom userpace ohne so einen Hack zugreifen:
http://falsinsoft.blogspot.de/2012/11/access-gpio-from-linux-user-space.html
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
Schau dir die Funktionen an, die dir die xlib für solche Widgets
zur Verfügung stellt. Wenn die in ihrer Logik so ohnehin benötigt
werden, macht es evtl. Sinn die auch zu benutzen (insbesondere
bzgl. der Eingabe-Events die du benötigst).
Variante 2 macht sicher mehr Spaß und jenachdem was benötigt
wird, mehr oder weniger Arbeit.
Normalerweise ergibt sich daraus eine Mischung aus 1 und 2.
Auch der locale Verbindungsaufbau mittels openssl s_client -connect localhost:443 dauert über 10 Sekunden.
Einfach mal an vielen Stellen Logging reinknallen und eingrenzen was überhaupt so lange dauert.
10 Sekunden sind ja extrem viel, da sollte man über die Timestamps im Logfile schon gut sehen können wo die Zeit draufgeht.
Hallo!
Hat schon jemand Erfahrung mit der Synchronisation einer App, die auf Android
oder Raspbian OS läuft? Nicht über WLAN, Bluetooth oder LTE/ UMTS, wenn
möglich bei Android über USB und beim Raspberry auch oder über einen anderen
freien seriellen Port. Auch nicht über LAN, da ein gewöhnliches Handy ja keine
RJ-45 Kupplung hat und auch ein LAN-Hub zzgl. Kabel sicher teurer ist, als
ein USB-Hub, abgesehen vom wohl höheren Programmieraufwand über TCP/IP(?)
Datenmäßig möchte ich nur ein Steuersignal an eine gleiche App übergeben,
ach so, ja in C oder C++.
Grüße und vielen Dank für jeden Tipp!
Micha
Hallo!
Wer weiß, wie man auf dem Android-System eine App zwischenschalten kann, um die Audio-Ausgabe zu editieren? Genauer, das Signal welches an den Klinkenausgang
bzw. an die internen Lautsprecher im Gerät oder per HDMI gesendet wird, in der Amplitude (16 Bit stereo, bei 44,1 kHz) linear und logarithmisch zu verändern. Gibt es dazu evtl. C-Code hier im Forum oder im Netz?
Viele Grüße und Danke!
Micha
Hi!
Leider verfüge ich nur über Audio-Erfahrung mit Windows und WAV.
Gibt es hier oder an anderen Stellen (im Netz/ Print) Beispielcode, um unter
Linux (Raspberry PI + Hifi-Audioinferface) ein 44.100 kHz 16 Bit Stereo Signal
einzulesen, die Lautstärke linear oder logarithmisch (Kompression) zu verändern
und wieder auszugeben? Respektive kennt sich jemand damit aus und kann mir dabei
helfen? Ich habe auch gelesen, dass in Bezug auf USB-Audio-Interfaces, das
Linux entsprechend konfiguriert werden muss, damit es keine Knackser bei der
Wiedergabe gibt(?) Wenn dann noch jemand eine Idee hat, wie man den Volume-
Parameter analog regeln könnte, würde mich das sehr freuen.
Grüße und Vielen Dank für jeden Tipp!
Micha
Hallo Dachschaden,
ok ich habe das soweit kapiert! Vielen, vielen Dank für deine Hilfe!
Hätte nicht gedacht, dass ich so schnell Hilfe mit so einem konkreten Problem bekomme!
Gruß und ein schönes Wochenende ,
Meho
Ah ja, klar. Hätten wir vorher auch schon sehen können. "-l" und "user" sind ja zwei Parameter, nicht nur einer, dh. die musst du auch entsprechend and execlp weiterreichen.
Wobei ich persönlich einfach die "user@hostname"-Syntax verwenden würde, dann sparst du dir zwei Parameter.
Die Batchmode-Option brauchst du nicht unbedingt, aber du möchtest vmtl. lieber, dass der Aufruf fehlschlägt, wenn der Key nicht funktioniert und nicht dass es einen Fallback auf Passwort-Auth gibt. Dafür ist Batchmode praktisch.
Danke für den Tipp!
Das Ding sieht auf jedenfall kleiner und übersichtlicher aus als andere, .... aber gibts sowas auch in noch kleiner ^^ (wie gesagt: button und so primitive sachen reichen). Ich will nur wissen wie sowas im inneren Aufgebaut ist. Also ob die ganzen Buttons in ner Liste gespeichert und dann auf die Koordinaten abgefragt werden, etc. Oder wie funktoniert das mit der Xlib NextEvent-Loop. Sowas halt. Bei der appgraph Sache ist mir das noch alles viel zu komplex, weil die halt 10 Objekte haben + Bilder-Verarbeitung + ...
SeppJ schrieb:
Wie wäre es, den Cache zentraler zu organisieren? Also so etwas wie eine Datenbank für deinen Dienst. Dann hast du auch keine der anderen möglichen Probleme, die du anscheinend noch gar nicht gefunden hast:
-Funktioniert auch ohne Schreibrechte
-Kein Zumüllen der Verzeichnisse mit deinen Cachedateien
Der Ansatz hat leider zwei Probleme:
- Datenbanksoftware würde wieder weitere Abhängigkeiten und Konfiguration bedeuten, die möglichst vermieden werden sollen. Wir wollen Komplexität minimieren und sie nicht verstecken.
- Wenn Daten über Pipe oder Socket angefragt werden, würden wir die Daten schon gerne Zero-Copy schreiben. Selbst, wenn ich eine Datenbanksoftware konfigurieren würde, die mir garantiert, dass zumindest beim Selecten des Datensatzes direkt das File-Mapping zur Verfügung steht (bin mir nicht mal sicher, dass es sowas gibt) - habe ich später beim write(2) -Call wieder den Flaschenhals, dass der Kernel die Daten in seinen eigenen Speicher kopiert. Und das sind (n + x) * y Bytes, wobei y zwischen 10.000 und 10.000.000 variiert und (n + x) mindestens über 100 Zeichen pro Eintrag sind (wir also relativ schnell in den Gigabytebereich für eine einzelne Anfrage kommen können) - die dann sinnloserweise hin und zurück kopiert werden müssen.
Die Cachedateien kann man auch direkt in einem Verzeichnis in /var/tmp ablegen. WO man die jetzt sucht, ist Jacke wie Hose - notfalls halt mit der Device-ID und der Inode des Verzeichnisses im Namen. Das Problem der Schreibrechte ist damit auch weg - wobei die man schon eigentlich haben will, wenn man neue Dateien ablegt, aber das ist ein minimales Problem.
Ich glaube, er meint, dass eine spezielle Funktion im Programm gewissen Speichervorgaben entsprechen soll. Aber der Rest des Programms darf währenddessen machen, was er möchte. So nach dem Motto "Wie viel Speicher verbraucht die Druckfunktion in meinem Browser abhängig von der Webseite?". Das ist, insbesondere angesichts der sonstigen Vorgaben (kein Zugriff auf den Code, usw.), meiner Ansicht nach unprüfbar, aber ich wollte keine negative Antwort geben, für den Fall, dass doch jemand eine geniale Idee hat.
depream schrieb:
Liege ich bei der Aufgabe eigentlich in der richtigen Spur?
Bis jetzt ist es ja nur ein leeres Gerüst.
Was mir vor allem fehlt, ist erst einmal eine vernünftige Verwaltung der Prozesse. Du musst die Daten der Prozesse irgendwo speichern, sonst kannst du sie schließlich nirgendwo verarbeiten. Es könnte nötig sein, dass du dein Programm dafür vollkommen umbauen musst.
ich verstehe nicht warum du am Anfang ein fork machst, dann die Schleife startest.
Anyway, den Exit-Status von wait zu bekommen, macht man mit dem WEXITSTATUS Makro
pid_number = wait(&status);
if(WIFEXITED(status))
printf("CHILD mit PID %d hat sich mit folgendem Exit-Status: %d beendet \n", pid_number, WEXITSTATUS(status));
else
printf("CHILD mit PID %d hat nicht normal über exit oder _exit beendet, Exit-Status unbekannt\n", pid_number);
}
siehe man: wait(2)
Das geht zwar auch, aber wenn es mit RPATH geht, ist das zu vorzuziehen.
Beim LD_LIBRARY_PATH muss man sonst beim Aufruf externer Programme aufpassen, ausserdem wird dann eben das Shellscript benoetigt was wiederum eine Shell benoetigt.