0

私はビーグルボーンでいくつかのGPIOを実行しており、現在コードにこれが含まれています。

#include <linux/gpio.h>         //for GPIO

char label[] = "sys/kernel/debug/gpio";

struct gpio xx[] = {
    { gpio1, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio2, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio3, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio4, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio5, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio6, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio7, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio8, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio9, GPIOF_DIR_OUT|GPIOF_INIT_LOW, label },
    { gpio10, GPIOF_DIR_OUT|GPIOF_INIT_HIGH, label },
    };

ここで、gpio#はすべて整数として定義されます。GPIOF_DIR_OUTとGPIOF_DIR_LOWは、「linux/gpio.h」内の関数です。

構造体は関数内で宣言されていません。これが私の問題だと思いますが、どのように間違っていると宣言されているのかわかりません。私はこれについて他のスレッドを見たことがありますが、私の問題を本当に助けたものは何もありません。問題は、構造内から関数を呼び出しているという事実だと思います。誰かがこれを確認するか、私がこれを修正するのを手伝ってくれるなら、それは素晴らしいことです。

4

4 に答える 4

1

[...] where gpio#, are all defined as integers [...]

I assumed that you probably mean something like:

const int gpio1 = 42;
const int gpio2 = 84;
const int gpio3 = 43;
// etc.

However, since xx is initialized in the global scope, it is allocated and initialized at compile-time. However, based on my assumption, gpio1 and friends are allocated and initialized at run-time, so obviously the compiler tells you that it can't initialize xx.

You will need to use a constant expression (or a macro that will expand into a literal constant) for this to work. Per example, you'd do:

enum {
    gpio1 = 42, 
    gpio2 = 84, 
    gpio3 = 43, 
    // etc.
};

...or:

#define gpio1 42
#define gpio2 84
#define gpio3 43
// etc.

And before you ask, label decays into a pointer to a string literal in this context. That makes it a constant expression, so this one is allowed.

于 2013-02-28T02:18:52.030 に答える
1

あなたが言うようにgpio1スルーgpio10が整数である場合、コンパイラが言うように、ここで宣言したものは無効です。C のグローバル変数初期化子は定数式でなければなりません。つまり、変数は許可されません!

于 2013-02-28T02:16:37.563 に答える
0

The GPIOF_DIR_OUT, GPIOF_INIT_LOW, GPIOF_INIT_HIGH are macros, not functions. So this is not the reason.

I think this issue maybe related to the gpio1~gpio10 definitions, are these things are variables or macros?

于 2013-02-28T02:19:01.433 に答える
0

etcの値を作成すると、次のようにコンパイルされますgpio1const

const unsigned gpio1 = 1;
于 2013-02-28T02:24:22.220 に答える