#include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { char *dev_mem = "/dev/mem"; int fd = open(dev_mem, O_RDWR | O_SYNC); if (fd == -1) { fprintf(stderr, "error opening >%s<.\n%s\n", dev_mem, strerror(errno)); exit(1); } uint32_t cmv_base = 0x80000000; uint32_t cmv_size = 0x00001000; uint32_t cmv_addr = 0x00000000; void *cmvb = mmap((void *)cmv_addr, cmv_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, cmv_base); if (cmvb == (void *)-1) { fprintf(stderr, "error mapping 0x%08lX+0x%08lX @0x%08lX.\n%s\n", (long)cmv_base, (long)cmv_size, (long)cmv_addr, strerror(errno)); exit(2); } else cmv_addr = (uint32_t)cmvb; uint32_t volatile * volatile cmv = cmvb; fprintf(stderr, "mapped 0x%08lX+0x%08lX to 0x%08lX.\n", (long unsigned)cmv_base, (long unsigned)cmv_size, (long unsigned)cmv_addr); uint32_t cnt = 0; while (1) { /* some condition here */ uint32_t val = cmv[127]; if (!(++cnt & 0xFFFF)) { printf("%08X %d\r", cnt, val); fflush(stdout); } } exit(EXIT_SUCCESS); }