Speicher direkt auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Applepearlol
User
Beiträge: 14
Registriert: Samstag 10. August 2013, 21:27

Gibt es eine Methode um den Speicher einer Bestimmten Adresse auszulesen? Wenn ja, wie nutzt man die?
BlackJack

@Applepearlol: Warum willst Du das tun?
Applepearlol
User
Beiträge: 14
Registriert: Samstag 10. August 2013, 21:27

ich hab ein Skript, das die I2C Schnittstelle am Raspi nutzt. Am Anfang wird in eine Speicheradresse ein Wert geschrieben, der per I2C an das Device geht. Später will ich aber den Wert um ein paar Einheiten vergrößern. Eine Variable mit dem Wert hab ich schon versucht, ist aber keine Gute Lösung, denn ich hab vor später multithreading zu integrieren und Lock verzögert die anderen Threads zu stark. Das Skript ist nämlich ziemlich zeitkritisch.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Egal ob Variable oder irgendein mysteriöser Speicher, bei gemeinsamem Schreibzugriff mehrerer Threads sind immer Locks nötig. Wenn das Skript zeitkritisch ist, ist multithreading sowieso nicht ideal, weil viel Zeit beim Wechseln der Threads verbraucht wird.
BlackJack

@Applepearlol: Ich sehe immer noch nicht wie das Speicher auslesen hier irgendwie hilfreich sein soll‽ Wie kommst Du denn überhaupt an eine Speicheradresse heran an der Du etwas auslesen möchtest? Und was möchtest Du da auslesen? Und wie schreibst Du am Anfang an eine Speicheradresse einen Wert? In Python‽
Applepearlol
User
Beiträge: 14
Registriert: Samstag 10. August 2013, 21:27

@BlackJack
ja, mit python, auf meinem Raspi und der smbus Library.
der I2C Bus hat nämlich eine Adresse für das was gesendet werden soll und in die schreib ich mit

Code: Alles auswählen

MCP = smbus.SMBus(adr, speicheradresse, varible)
BlackJack

@Applepearlol: Ich denke da verstehst Du etwas falsch. I²C ist ein serieller Bus, das was Du dort `speicheradresse` nennst ist ein Datum was als Wert über diesen Bus übertragen wird und keine tatsächliche Speicherstelle. Der Empfänger auf dem Bus *kann* das bei sich als rohe Speicheradresse interpetieren, aber auch als alles mögliche andere. Ist halt eine Zahl. Und selbst wenn der Empfänger das direkt auf *seinen* Speicher abbildet, kannst Du da von Deiner Seite aus nicht direkt zugreifen, egal von welcher Programmiersprache, denn Dein Prozessor ist mit dem Speicher von dem Empfänger ja gar nicht verbunden. Die Verbindung ist ja der I²C-Bus.

Der Python-Quelltext würde bei mir übrigens nicht funktionieren, weil `smbus.SMBus` bei mir nur den Bus als Argument erwartet und ich zum schreiben von Werten darauf dann erst eine der `write_*()`-Methoden aufrufen müsste.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ok, passt jetzt nicht wirklich zum Thread, da es hier ja letztlich nicht darum ging, wirklich den "Speicher auszulesen". Aber falls jemand doch noch hier reinstolpert und weil ich gerade das Programm der diesjährigen EuroPycon lese: Dort wird ein Talk von Piotr Przymus mit dem Title "Everything You Always Wanted to Know About Memory in Python But Were Afraid to Ask" stattfinden.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten