1

MCUのGPIOピンの状態を読み取り、10個の数字の配列に繰り返し格納したいです。配列がいっぱいになると、値を左にシフトし、新しい値を [9] 番目の添字位置に格納して続行する必要があります。

これを Embedded C のコードとして実装するにはどうすればよいですか?

4

3 に答える 3

2

毎回 1 ビットしか格納していないことを考えると、配列が唯一の解決策ではありません。

static uint16_t buffer = 0;

void gpio_add(bool pin_value)
{
    buffer >>= 1;
    if(pin_value) {buffer |= 0x0200;}
}

bool gpio_get_entry(uint8_t index)
{
    return !!(buffer & (1 << index));
}

このアプローチを採用している場合は、8 個または 16 個の値を格納することもできます。

これの目的が単純なデバウンサーを実装すること (つまり、ピン レベルがしばらく安定しているかどうかを判断すること) である場合、buffer0 か 0x3FF かを簡単に確認できます。

于 2015-08-11T09:51:48.143 に答える
0

よく理解していれば、次のようになります。

void insert(int* arr, int size, int value){
    int i = 0;
    for(int i=0; i < size-1; i++){
        arr[i] = arr[i+1];
    }
    arr[size-1] = value;
}

size は配列のサイズ (10) です。念のため、配列を 0 または -1 で初期化する必要があります。ただし、ANSI C と組み込み C の違いはわかりません。おそらく "for(int i = ;...)" が機能せず、直前に変数 i を作成する必要があります。それがあなたが望んでいたものかどうかはわかりません。

于 2015-08-11T07:04:44.673 に答える