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 NULLs 它工作得很好吗?

据我所知,这个 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!

   ...

  };