0

背景

我正在使用 RTEMS 并尝试设置本机 NFS 客户端。尽管我已正确包含此内容,但驱动程序可用的动态驱动程序条目不足。您可以在此处寻求更多信息。

执行

为了设置额外的动态驱动程序,需要将 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

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

除冰驱动程序如下所示:

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'

这里看,这似乎是用未指定数量的表元素编译的问题。我不明白的是,如果我用 7 s(我需要的数字)指定它,它目前正在工作,它会失败,但是用 6 s 它工作得很好?NULL_DRIVER_TABLE_ENTRYNULLNULL

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

4

1 回答 1

0

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

该表的工作方式是 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!

   ...

  };
于 2015-07-07T21:24:10.800 回答