所以在嵌入式系统上,我在闪存中读取和写入一些整数。我可以用这个函数阅读它:
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/