Schreiben in memory map?
-
Hallo,
ich versuche ein vorhandenes Programm (geschrieben in C) unter C++ zu kompilieren. Doch leider meldet der Kompiler immer
error: pointer of type `void *' used in arithmetic
für die letzte Zeile des u.a. Source-Codes
void * map_base; map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd_mem, PIOB_BASE & ~MAP_MASK); if(map_base == (void *) -1){ printf("Couldn't get Map-Address.\n"); exit(1); } printf("Memory mapped at address %p.\n", map_base); fflush(stdout); // Configure the registers *((unsigned long *) (map_base + (PIOB_PER & MAP_MASK))) = PIO_B27; //enable ioWie beschreibe ich unter C++ die Speicherzelle in der Mmap korrekt?
Auch nach langem Suchen habe ich leider zu diesem Thema nichts finden können.
Kennt jemand die LösungDanke und Grüsse
Ulli
-
ulli G schrieb:
*((unsigned long *) (map_base + (PIOB_PER & MAP_MASK))) = PIO_B27; //enable ioversuch mal so:
*((unsigned long *)map_base + (PIOB_PER & MAP_MASK)) = PIO_B27; //enable io
-
net schrieb:
versuch mal so:
*((unsigned long *)map_base + (PIOB_PER & MAP_MASK)) = PIO_B27; //enable ioHurra,
das hat zumindest beim kompilieren geholfen,
doch leider gibt's jetzt einen Laufzeitfehler "segmentation fault" bei der Ausführung der Zeile.Unter C läuft das Programm auf der gleichen Hardware durch.
Noch eine Idee?
Gruss
Ulli
-
Caste den map_base pointer zu einem unsigned char* dann führe die Arithmetik durch und dann caste ihn erst zu unsigned long*
-
Also so:
*((unsigned long *) ((unsigned char*)map_base + (PIOB_PER & MAP_MASK))) = PIO_B27; //enable io
-
lolz schrieb:
Also so:
*((unsigned long *) ((unsigned char*)map_base + (PIOB_PER & MAP_MASK))) = PIO_B27; //enable io... jetzt funktionierts!
Suuuuuuuper!!!
Gruss
Ulli
-
Das war mir klar
