RTEMS 驱动程序定义中数组设置的“初始化器太多”
`Too many initializers` for for array setup in RTEMS driver definition
背景
我正在使用 RTEMS 并尝试设置本机 NFS 客户端。虽然我已经正确地包含了这个,但没有足够的动态驱动程序条目可用于驱动程序。您可以寻求更多信息here。
实施
为了设置额外的动态驱动程序,需要将 NULL 元素添加到大量 table 的免费驱动程序中。请参阅以下内容:
#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
本质上,这是在构建设备驱动程序 table ...
一个设备驱动看起来像这样:
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 来看,这似乎是使用未指定数量的 table 元素进行编译时出现的问题。我不明白的是,这目前正在 工作 因为如果我用 7 NULL
指定 NULL_DRIVER_TABLE_ENTRY
(我需要的数字),它将失败,但是有 6 NULL
s 它工作得很好吗?
据我所知,这个 table 或其元素的大小没有定义?有任何想法吗?
所以这是一个愚蠢的错误...
这个 table 的工作方式是 NULL table 条目:
#define NULL_DRIVER_TABLE_ENTRY \
{ NULL, NULL, NULL, NULL, NULL, NULL}
实际上是数组中对应一个rtems_driver_address_table
的条目。这个驱动程序有 6 个元素,我试图有 7 个。解决这个问题的方法是添加一个额外的空条目,如下所示:
rtems_driver_address_table Device_drivers[] = {
...
#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
NULL_DRIVER_TABLE_ENTRY,
NULL_DRIVER_TABLE_ENTRY // Add extra entry here!
...
};
背景
我正在使用 RTEMS 并尝试设置本机 NFS 客户端。虽然我已经正确地包含了这个,但没有足够的动态驱动程序条目可用于驱动程序。您可以寻求更多信息here。
实施
为了设置额外的动态驱动程序,需要将 NULL 元素添加到大量 table 的免费驱动程序中。请参阅以下内容:
#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
本质上,这是在构建设备驱动程序 table ...
一个设备驱动看起来像这样:
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 来看,这似乎是使用未指定数量的 table 元素进行编译时出现的问题。我不明白的是,这目前正在 工作 因为如果我用 7 NULL
指定 NULL_DRIVER_TABLE_ENTRY
(我需要的数字),它将失败,但是有 6 NULL
s 它工作得很好吗?
据我所知,这个 table 或其元素的大小没有定义?有任何想法吗?
所以这是一个愚蠢的错误...
这个 table 的工作方式是 NULL table 条目:
#define NULL_DRIVER_TABLE_ENTRY \
{ NULL, NULL, NULL, NULL, NULL, NULL}
实际上是数组中对应一个rtems_driver_address_table
的条目。这个驱动程序有 6 个元素,我试图有 7 个。解决这个问题的方法是添加一个额外的空条目,如下所示:
rtems_driver_address_table Device_drivers[] = {
...
#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
NULL_DRIVER_TABLE_ENTRY,
NULL_DRIVER_TABLE_ENTRY // Add extra entry here!
...
};