2

2つのIR距離センサーを備えたST269マイクロコントローラーをプログラミングしています。これらのセンサーを較正するために、測定した距離とADCから取得した対応する値を使用して、センサーごとに1つのテーブルを作成しました。

ここで、1つの関数を使用して、その間の値を概算します。そこで、2つの2次元配列(センサーごとに1つ)をグローバル変数として定義しました。次に、関数で、操作する1つの配列を作業配列にコピーし、値を概算します。

コードは次のとおりです。

...

unsigned int ir_werte_re[][] = {
    {8,553}, 
    ...
    {83,133}
};

unsigned int ir_werte_li[][] = {
    {8,566}, 
    ...
    {83,147}
};

...

unsigned int geradenaproximation(unsigned int messwert, unsigned int seite)
{
    unsigned int working_array[16][16];
    unsigned int i = 0;

    if (seite == 0) {
        for (i = 0; i < sizeof(working_array); i++) {
            working_array[i][0] = ir_werte_li[i][0];
            i++;
        }
    }
    else {
        for (i = 0; i < sizeof(working_array); i++) {
            working_array[i][0] = ir_werte_re[i][0];
            i++;
        }
    }

    i = 0;
    unsigned int y1 = 0;
    unsigned int x1 = 0;
    ...
}

このコードはsensor.cというファイルにあります。私たちはsensor.hにグローバルアレイについて何も書きませんでしたか?もちろん、sensor.hはmain.cに含まれており、そこで関数が呼び出されます。

また、を介してアレイをコピーしようとしました

memcpy(working_array、ir_werte_li、sizeof(working_array));

そして、あらゆる方法でこれを行うと、

syntax error near unsigned

私たちが宣言している行で

unsigned int y1 = 0;

そして、私はこの行に構文エラーがないことをかなり確信しています:)

私が最後にCでコーディングをするのは数年先なので、これを行う方法が良いかどうかはわかりません。おそらく、配列などを実際にコピーする代わりに、ポインタを使用することでこれを解決できます。だから私を助けてください私はこれについてあなたのビットに感謝します。

4

1 に答える 1

6

C(C99より前)では、すべての変数定義が現在のブロックスコープの先頭に表示される必要があります。

于 2010-05-27T10:36:36.023 に答える