mikrocontroller.net

Forum: PC-Programmierung Hilfe bei Ram Adressierungen


Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

erschlagt mich nicht :D Aber ich bin in C nicht so ganz konform. Aber 
ich benötige die Daten dieser Adresse wirklich. Jedoch habe ich nicht so 
wirklich die Ahnung wie ich daran komme, erstmal zu 
grundverständnissfrage:

ich habe folgenden Zeiger auf eine Adresse:
fCurrDataA = new Address(0x00c15b55, 7344);

Die erste Zahl (hex) ist die Adresse, die zweite Zahl (dec) ist der 
offset.

Nun kommt das Problem was ich nicht zu lösen weis:

"You need to read 4 byte integer to this Address (1st digit)" <- heißt 
das das der erste Wert mir eine Integer von dieser Adresse zurückgibt?

"To this number to add a decimal number (2 number form the address)." <- 
soll ich nun die hinteren zahlen dazuaddieren oder übergibt mir die 
Speicheradresse zwei Werte welche ich addieren muß?

Das Resultat dieser Rechnung jedenfalls gibt mir die Speicherposition 
zurück an welchen ich meine Daten auslesen kann.

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du einen Zeiger auf die Adresse 0x00c15b55 mit Offset 7344 
brauchst, dann nimm das hier:
void *zeiger = (void *) (0x00c15b55 + 7344);

MfG
Marius

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> erschlagt mich nicht :D Aber ich bin in C nicht so ganz konform.

Meinst du "firm"?

> ich habe folgenden Zeiger auf eine Adresse:
>
> fCurrDataA = new Address(0x00c15b55, 7344);

Das sieht erstmal nicht nach C aus, denn da gibt es keinen Operator 
new, Könnte eher C++ sein, und mit "Adresse" ist anscheinend eine 
Instanz einer Klasse namens "Address" gemeint. Nur läßt sich das in 
keiner Weise mit dem in Zusammenhang bringen, was du im Folgenden 
schreibst.

> Die erste Zahl (hex) ist die Adresse, die zweite Zahl (dec) ist der
> offset.

Und was passiert dann damit?

> "You need to read 4 byte integer to this Address (1st digit)" <- heißt
> das das der erste Wert mir eine Integer von dieser Adresse zurückgibt?

Wie "zurückgibt"? Oben übergibst du doch den Wert.

> "To this number to add a decimal number (2 number form the address)." <-
> soll ich nun die hinteren zahlen dazuaddieren oder übergibt mir die
> Speicheradresse zwei Werte welche ich addieren muß?

Hmm, der Satz ergibt erstmal gar keinen Sinn und ist auch in ziemlich 
holprigem Englisch geschrieben, wie der erste. Wo kommt diese Doku denn 
her?

> Das Resultat dieser Rechnung jedenfalls gibt mir die Speicherposition
> zurück an welchen ich meine Daten auslesen kann.

Welche Rechnung?

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ich denke eher das in dieser Adresse, die Adresse für meine Werte 
liegen, oder sehe ich das falsch?!

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus schrieb:
> Wo kommt diese Doku denn
>
> her?

Von einem Russen via EMail :D

Ich muß mal schauen wie ich das geregelt bekomme... Zumindest steht an 
dieser Position scheinbar die Adresse für meine Adresse zu dem Speicher.

Autor: R. Freitag (rfr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C hast du eine variable, deren Typ Pointer ist, und setzt den Pointer 
auf die Adresse, von der du lesen willst. Typischerweise addiert man pro 
Lesen die Grösse des zu lesenden Datentyps hinzu und liest solange, bis 
man fertig ist.

Was du beschrieben hast, ist objektorientiert und ohne weitere Angaben 
unverständlich. Am Einfachsten wäre es, wenn du schreibst, was du machen 
willst und das Codesnippet einfügst.

Gruss

Robert

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich möchte aus dem Ram Adressen Daten auslesen jedoch:

"And and so look:
1st digit - the address (hex a number system),
2nd - offset (decimal).

It not simple addresses, is pointers.
To read on them so:
You need to read 4 byte integer to the Address (1st digit).
To this number to add a decimal number (2 number from the address).

And the received number is an address where that is necessary for you
"

Und das brauche ich, den Code oben hat er mir als Snipet mitgeschickt.

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da sieht man mal wohin das Ganze mit Outsourcing, Nearshoring und 
sonstige Auslagerungsstrategien führt ....

Autor: horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Russe schreibt wohl, dass die erste Zahl die Adresse mit 4 byte, und 
die zweite Zahl der offset ist.


Vermurkste x86 Architektur halt:
Mehrere dieser Adressen können den selben Speicherplatz beschreiben.

Soweit ich mich erinnere, wird der offset noch mit der Blockgröße 
multipliziert, bevor er zur Adresse addiert wird.


Was genau war jetzt deine Frage? Was der Russe dir geschrieben hat?
Das war ziemlich genau:
> Die erste Zahl (hex) ist die Adresse, die zweite Zahl (dec) ist der
> offset.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist der Sinn der Übung?
Worauf soll das laufen und was soll es bewirken, was der des Englischen 
eher nicht mächtige russische Zeitgenosse da beschreibt?

Autor: horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/X86-Prozessor
unter Real Mode:
Segmentadresse x 16 + Offset ergibt die absolute Adresse.

Aber wenn Du nicht tief im Betriebssystem drinnen bist, dann wird das 
Betriebssystem nicht ohne weiteres einen Zugriff auf diese Adresse 
erlauben.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Was ist der Sinn der Übung?
>
> Worauf soll das laufen und was soll es bewirken, was der des Englischen
>
> eher nicht mächtige russische Zeitgenosse da beschreibt?


Na ich denke mein englisch ist auch nicht viel besser :D

Der Sinn der ganzen Geschichte:

An dieser Postion sollen, entweder die Werte oder die Position der Werte 
liegen, welche aus einem Spiel die Geschwindigkeit (m/s) ermitteln.

Diese Werte möchte ich via RS232 auf einem externen Display anzeigen.

Quasi eine externe Geschwindigkeitsanzeige...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst also auf Daten zugreifen, die im Adressraum eines Programmes 
liegen. Schön und gut, und unter welchem Betriebssystem hast Du das 
vor?

Unter DOS mag man das so machen können, aber unter den ernstgemeinten 
Windows-Versionen und genauso auch unter Linux und artverwandtem kann 
ein Programm nicht ohne weiteres auf den Speicher zugreifen, den ein 
anderes Programm verwendet.
Ausreichende Berechtigungen vorausgesetzt (Administrator, Debug-Privileg 
etc.) ist es möglich, mit betriebssystemspezifischen Funktionen auf 
Speicherbereiche anderer Prozesse zuzugreifen; mit simplen 
Pointeroperationen aber geht das nicht.

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.