1

所以在嵌入式系统上,我正在读取一些整数并将其写入闪存。我可以用这个功能阅读它:

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 'ÿ'

有没有办法找出来?

4

2 回答 2

3

您需要首先定义“空”,因为您使用的是 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;
};

然后您可以检查是否设置了空位,但不利的部分是您丢失了整个位。

于 2015-06-11T15:51:34.410 回答
1

如果您的数组是一个指针数组,您可以通过将其与 进行比较来查看{nullptr},否则,您不能,除非您将所有初始索引初始化为相同的值,然后检查该值是否仍然相同。

于 2015-06-11T15:31:03.523 回答