`Слишком много инициализаторов` для настройки массива в определении драйвера RTEMS

Фон

Я использую 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'

От глядя Вот похоже, это проблема компиляции с неопределенным количеством элементов таблицы. Что я не понимаю, так это то, что это в настоящее время за работой в том, что если я укажу NULL_DRIVER_TABLE_ENTRY с 7 NULLs (номер, который мне нужен), он потерпит неудачу, но с 6 NULLс отлично работает?

Насколько я могу сказать, нет никакого определения относительно размера этой таблицы или ее элементов? Есть идеи?

0

Решение

Так что это была глупая ошибка …

Эта таблица работает так, что запись таблицы NULL:

#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!

...

};
0

Другие решения


По вопросам рекламы [email protected]