gpt4 book ai didi

c++ - `Too many initializers` 用于 RTEMS 驱动程序定义中的阵列设置

转载 作者:行者123 更新时间:2023-11-30 17:12:47 25 4
gpt4 key购买 nike

背景

我正在使用 RTEMS 并尝试设置 native NFS 客户端。尽管我已正确包含此内容,但没有足够的动态驱动程序条目可用于驱动程序。您可以索取更多信息here

实现

为了设置额外的动态驱动程序,需要将 NULL 元素添加到一大张免费驱动程序表中。请参阅以下内容:

#define NULL_DRIVER_TABLE_ENTRY \
{ NULL, NULL, NULL, NULL, NULL, NULL}


#ifdef CONFIGURE_INIT
rtems_driver_address_table Device_drivers[] = {
#ifdef CONFIGURE_BSP_PREREQUISITE_DRIVERS
CONFIGURE_BSP_PREREQUISITE_DRIVERS,
#endif
#ifdef CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS,
#endif

...

#ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
CONFIGURE_APPLICATION_EXTRA_DRIVERS,
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
NULL_DRIVER_TABLE_ENTRY
#elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) && \
!defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
NULL_DRIVER_TABLE_ENTRY
#endif
};
#endif

本质上,这是在构 build 备驱动程序表......

设备驱动程序如下所示:

typedef struct {
rtems_device_driver_entry initialization_entry; /* initialization procedure */
rtems_device_driver_entry open_entry; /* open request procedure */
rtems_device_driver_entry close_entry; /* close request procedure */
rtems_device_driver_entry read_entry; /* read request procedure */
rtems_device_driver_entry write_entry; /* write request procedure */
rtems_device_driver_entry control_entry; /* special functions procedure */
} rtems_driver_address_table;

问题

问题可能非常简单,当我构建这个时,我收到以下错误:

confdefs.h:568: error: too many initializers for 'rtems_driver_address_table'

从看here这似乎是使用未指定数量的表元素进行编译时出现的问题。我不明白的是,如果我指定 NULL_DRIVER_TABLE_ENTRY ,这当前正在工作与 7 NULL s(我需要的数字),它会失败,但是 6 NULL它工作得很好吗?

据我所知,该表或其元素的大小没有定义?有任何想法吗?

最佳答案

所以这是一个愚蠢的错误......

该表的工作方式是 NULL 表条目:

#define NULL_DRIVER_TABLE_ENTRY \
{ NULL, NULL, NULL, NULL, NULL, NULL}

实际上是数组中对应于rtems_driver_address_table的条目。该驱动程序有 6 个元素,而我试图有 7 个元素。解决方案是添加一个额外的 null 条目,如下所示:

 rtems_driver_address_table Device_drivers[] = {

...

#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
NULL_DRIVER_TABLE_ENTRY,
NULL_DRIVER_TABLE_ENTRY // Add extra entry here!

...

};

关于c++ - `Too many initializers` 用于 RTEMS 驱动程序定义中的阵列设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31279265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com