У меня есть структура, которая определяется следующим образом:
typedef struct {
sn74lvc138a_options_t decoder_opts;
uint32_t pin_int;
uint32_t pin_rst;
uint32_t pin_pwr;
...
} w5500_options_t;
Вложенная структура sn74lvc138a_options_t выглядит следующим образом:
static const sn74lvc138a_options_t sn74lvc138a_opts ={
.decoder_a = DECODER_A_GPIO,
.decoder_b = DECODER_B_GPIO,
.decoder_c = DECODER_C_GPIO,
.decoder_sel = DECODER_SEL_GPIO
};
Эти два хранятся в двух разных модулях C.Один из модулей C (тот, который также содержит экземпляр w5500_options_t) имеет следующую определенную функцию:
static const sn74lvc138a_options_t* _get_spi_decoder(void) {
return cpu_samv71_get_sn74lvc138a(); // This is a function from the other C module
}
Я хотел бы иметь возможность сделать следующее для инициализации времени компиляции:
static const w5500_options_t w5500_opts = {
.pin_int = SOMEVALUE1,
.pin_rst = SOMEVALUE2,
.pin_pwr = SOMEVALUE3,
.decoder_opts = _get_spi_decoder()
};
По сути, я пытаюсь получить ссылку на экземпляр структуры внутри блока инициализации.Поскольку сама ссылка определена как const, и функция возвращает указатель const, компилятор должен иметь возможность сделать это (я использую GCC с C99).
Вопрос теперь: это вообще не разрешеноили я делаю что-то не так, что запрещает это.Точное сообщение об ошибке, которое я получаю от компилятора, состоит в том, что «элемент инициализатора не является константой».