0

我真的无法解决这个问题。

错误:初始化元素不是常量

错误:(接近初始化 tca6507_leds1.leds.num_leds)

我认为问题与struct led_info *ledsinside有关led_platform_data。由于它是一个指针,这在某种程度上不是 const 吗?我特别困惑,因为led_platform_data并且led_info是 linux 内核的一部分。tca6507_platform_data也是内核源代码中包含的驱动程序的一部分。

这是我的初始化:

static struct led_info tca6507_led_infos[] = {
    {
            .name                   = "left_blue",
            .default_trigger        = "heartbeat",
    },
};

static struct led_platform_data tca6507_leds2 = {
    .leds           = tca6507_led_infos,
};

struct tca6507_platform_data tca6507_leds1 = {
    .leds           = tca6507_leds1
};

所有结构都在我没有编写的头文件中定义。

struct led_info {
    const char      *name;
    const char      *default_trigger;
    int             flags;
};

struct led_platform_data {
    int             num_leds;
    struct          led_info *leds;
};

struct tca6507_platform_data {
    struct led_platform_data leds;
#ifdef CONFIG_GPIOLIB
    int gpio_base;
    void (*setup)(unsigned gpio_base, unsigned ngpio);
#endif
};
4

1 回答 1

1

问题就在这三行位的中间:

struct tca6507_platform_data tca6507_leds1 = {
    .leds           = tca6507_leds1
};

的(编译时间)值是tca6507_leds1多少?请注意,它是一个结构,而不是一个数组。

将其与(有效)进行比较:

static struct led_platform_data tca6507_leds2 = {
    .leds           = tca6507_led_infos,
};

的(编译时间)值是tca6507_led_infos多少?(请注意,它一个数组,数组的“值”是它的第一个元素的地址。)最重要的是(也许我不应该埋没 lede :-)),与(也有效)进行比较:

static struct led_info tca6507_led_infos[] = {
    {
            .name                   = "left_blue",
            .default_trigger        = "heartbeat",
    },
};

请注意,这里的初始化程序不是使用变量的值,而是用大括号括起来的项目列表。这(与失败案例一样)是 的一个实例struct led_info,它必须包含一个实际struct led_platform_data实例(而不是指向一个或多个的指针,如 中所用struct led_platform_data)。


(以上是一个练习。答案是,结构的值就是结构的值——但这不是编译时常量。此外,您正在尝试使用您拥有的结构的值一开始还没有完成初始化。你需要X来设置X,但你必须先找到X,你通过找到X来完成,并且递归没有结束。)

于 2013-06-14T18:22:07.387 回答