我在linux7arm上编写c ++,当我将一个物理地址空间页映射到本地地址空间并尝试读取时,物理地址指的是一个内存块(可由其他外设访问/更改)它工作正常并显示预期的数据,但不是所有的时间。如果我编写一个脚本来循环运行我编译的c程序并只打印数据,它会随机打印0xdeadbeef。这可能与物理内存有关,或者我的代码有问题!
int page_size = sysconf(_SC_PAGE_SIZE);
if ((mem_file = open("/dev/mem", O_RDWR|O_SYNC)) < 0) {
close(mem_file);
printf("Error : Unable to open /dev/mem\n");
}
local_address = mmap(
NULL,
page_size, // length of the mapped mem
PROT_READ,
MAP_SHARED,
mem_file,
(uint32_t)page_address // starting physical address
);
volatile char * start_address=(char *)local_address;
printf("\n");
for(i=0;i<page_size;i++) {
printf("%x",*(start_address+i));
{
printf("\n");
munmap . . .
答案 0 :(得分:0)
您的代码有两个可能的问题:
话虽如此,我怀疑你所看到的是与这两个问题有关,并怀疑0xdeadbeef的内存值是指示访问内存时出现错误的RTL设计器的不良方式。