因此,在嵌入式系统上,我正在读取并将一些整数写入闪存。我可以用这个函数阅读它:
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 'ÿ'
有没有办法找到它?
答案 0 :(得分:3)
您需要先定义“空”,因为您使用的是uint32_t。一个好的ide是使用值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;
};
然后你可以检查空位是否设置,但负面部分是你丢失了一点。
答案 1 :(得分:1)
如果您的数组是一个指针数组,您可以通过将其与{nullptr}
进行比较来查看,否则,除非您将所有初始索引初始化为相同的值,然后检查该值是否仍然存在,否则您无法查看同样的。