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 10 進数) を空の値として使用することをお勧めしますが、この値が他のものに使用されていないことを確認する必要があります。次に、かどうかをテストできますif ( buf [ 5 ] == 0xFFFFFFFF )

しかし、uint32_t の範囲全体を使用している場合、それが空かどうかを検出する方法はありません。

もう 1 つの方法は、構造体を使用して空のビットを定義することです。

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 に答える