mmap无法按预期工作(返回随机0xdeadbeef)
mmap does not work as expected (return random 0xdeadbeef)
我在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/memn");
}
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 . . .
您的代码有两个可能的问题:
- 您需要检查mmap的返回值,以防它失败
- 您假设与CPU共享内存的外围设备是与其一致的数据缓存。这是可能的,但不太可能。如果没有,你一定会看到过时的数据
话虽如此,我怀疑您所看到的与这两个问题有关,并怀疑0xdeadbeef的内存值是RTL设计器在访问内存时指示某些错误的糟糕方式。
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 使用std::mt19937从字符串中返回一个随机单词
- C++随机uniform_int_distribution在所有线程中返回相同的值
- 动态数组传递给 main 中用随机值填充的函数,返回值3221226356
- 从基于属性的列表中返回随机对象
- DoModal 主应用程序随机返回 -1 代码
- 增强随机发电机返回相同的值
- 尝试以随机字符(长读取)打印字符串返回结果
- 随机函数在循环中调用时返回相同的数字!C++
- 为什么从函数返回c弦乐会导致随机字符
- C 从向量的子集返回一个随机值
- 打印链表返回随机符号
- 随机返回相同的循环值
- SDL_GetWindowFlags() 返回看似随机的值
- 随机字符作为在样本中使用 libaws 时返回
- 返回随机字符串
- 如何在 c++ 中从枚举返回随机元素
- mmap无法按预期工作(返回随机0xdeadbeef)
- CryptDecrypt在解密字符串的末尾返回随机字符
- 以C++返回随机值的函数。找不到问题