hell-student
Lieutenant
- Registriert
- Nov. 2007
- Beiträge
- 671
Hallo Zusammen,
ich bräuchte mal wieder eure Hilfe. Ich mappe mir per mmap einen Speicher in den Adressraum der Anwendung und möchte nun in den Speicher Daten schreiben und später lesen. Nur möchte ich nun gerne eine Funktion haben, der ich eine Adresse auf den Speicher übergebe + die Daten und dort soll alles dann gemacht werden. Leider funktioniert das nicht. Folgender Code:
Dies Funktioniert:
Hierbei ist ja nur Zeile 10-12 wichtig. In Zeile 10 mache ich mir einen Pointer auf die Adresse und dereferenziere diesen in Zeile 11 sodass ich das ändern kann, was an der Speicheradresse steht.
Wenn ich aber folgendes habe, funktioniert es nicht mehr -> ich lese nur 0en:
Was mache ich hier falsch?
ich bräuchte mal wieder eure Hilfe. Ich mappe mir per mmap einen Speicher in den Adressraum der Anwendung und möchte nun in den Speicher Daten schreiben und später lesen. Nur möchte ich nun gerne eine Funktion haben, der ich eine Adresse auf den Speicher übergebe + die Daten und dort soll alles dann gemacht werden. Leider funktioniert das nicht. Folgender Code:
Dies Funktioniert:
Code:
void *vlc_mem_baddr;
int mem_fd;
int main() {
printf("HALLO\n");
open_mem_device(&mem_fd);
map_vlc_mem(&vlc_mem_baddr);
unsigned int *vlc_mem = (unsigned int*)vlc_mem_baddr;
*vlc_mem = 0xFFFFFFFF;
printf("vlc_mem: %i %x %u\n", vlc_mem[0], vlc_mem[0], vlc_mem[0]);
return 0;
}
Hierbei ist ja nur Zeile 10-12 wichtig. In Zeile 10 mache ich mir einen Pointer auf die Adresse und dereferenziere diesen in Zeile 11 sodass ich das ändern kann, was an der Speicheradresse steht.
Wenn ich aber folgendes habe, funktioniert es nicht mehr -> ich lese nur 0en:
Code:
int vlc0[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
int vlc1[3] = { 0xFAFAFAFA, 0xFAFAFAFA, 0xFAFAFAFA};
write_to_vlc_mem(vlc_mem_baddr, vlc0);
write_to_vlc_mem(vlc_mem_baddr, vlc1);
unsigned int *vlc_mem = (unsigned int*)vlc_mem_baddr;
unsigned int i = 0;
for (i = 0; i < 10; i++) {
printf("vlc_mem: %i %x %u\n", vlc_mem[i], vlc_mem[i], vlc_mem[i]);
}
Code:
void write_to_vlc_mem(void *vlc_mem_addr_t, int vlcw[3]) {
unsigned int i;
volatile unsigned int *vlc_mem = (unsigned int *)vlc_mem_addr_t;
for (i = 0; i < 3; i++) {
*vlc_mem = vlcw[i];
vlc_mem++;
}
for (i = 3; i < 6; i++) {
vlc_mem++;
}
}
Was mache ich hier falsch?
Zuletzt bearbeitet: