c++ - 我怎么知道我正在读取的内存地址在 C++ 中是否为空?

标签 c++ buffer flash-memory

所以在嵌入式系统上,我在闪存中读取和写入一些整数。我可以用这个函数阅读它:

read(uint32_t *buffer, uint32_t num_words){
    uint32_t startAddress = FLASH_SECTOR_7;

    for(uint32_t i = 0; i < num_words; i++){
        buffer[i] = *(uint32_t *)(startAddress + (i*4));
    }
}

然后

uint32_t buf[10];
read(buf,10);

我怎么知道 buff[5] 是否为空(上面有任何东西)?

现在在空的项目上我得到类似 165 '¥'255 'ÿ'

有办法找出来吗?

最佳答案

您需要首先定义“空”,因为您使用的是 uint32_t。一个好主意是使用值 0xFFFFFFFF(十进制为 4294967295)作为空值,但您需要确保该值未用于其他用途。然后你可以测试是否 if ( buf [ 5 ] == 0xFFFFFFFF )

但是如果你使用了 uint32_t 的整个范围,那么就没有办法检测它是否为空。

另一种方法是使用结构体,并定义一个空位。

struct uint31_t
{
    uint32_t empty : 0x01; // If set, then uint31_t.value is empty
    uint32_t value : 0x1F;
};

然后你可以检查是否设置了空位,但消极的部分是你失去了整整一位。

关于c++ - 我怎么知道我正在读取的内存地址在 C++ 中是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785081/

相关文章:

c - YAFFS 文件系统是否支持每 256 字节页面超过 1 位的 ECC?

c++ - 关于重构的书的建议?

c++ - 为什么 C 预处理器认为枚举值是相等的?

java - 将 wav 文件放入由帧集合组成的 ArrayList 中

java - 将 float 组和浮点值复制到字节缓冲区 - Java

c - 将全局声明的缓冲区写入 FLASH 时出现 STM32 Hardfault 异常

c - FAT 文件系统和大量写入

c++ - 从单独的线程发送 UDP

c++ - 在 C++ 中暂停程序执行 5 秒

node.js - Node.js 网络服务器数据事件对象是缓冲区吗?