Я работаю с PIC32, MPLABX и XC32, и в настоящее время мне приходится делать много аппаратных описаний для каждого периферийного устройства. Некоторые из заданий примерно такие:
В файле1.h
extern const stream_t EHAL_PIN_STREAM_TEMPLATE;
В файле1.с
const stream_t EHAL_PIN_STREAM_TEMPLATE = {
.field1 = constant, .field2 = constant, ...
}
В файле2.h
#include "file1.h"
const stream_ehal_pin_t EHAL_STREAM_PIN_RF1 = {
.stream = EHAL_PIN_STREAM_TEMPLATE,
.pin = &EHAL_PIN_RF1
};
По сути, я создаю карту между нашими потоками и цифровым выводом PIC32.RF1, и я хотел сделать это, используя константные глобальные переменные, но я получаю ошибку initializer element is not constant, когда пытаюсь использовать EHAL_PIN_STREAM_TEMPLATE.
Знаете ли вы какое-либо решение, кроме инициализации EHAL_STREAM_PIN_RF1 во время выполнения?
ИЗМЕНИТЬ
Поскольку я не хотел выполнять инициализацию во время выполнения, моим решением было создать один макрос для каждого поля EHAL_PIN_STREAM_TEMPLATE и использовать эти макросы для заполнения структур EHAL_STREAM_PIN_RF1:
#include "file1.h"
const stream_ehal_pin_t EHAL_STREAM_PIN_RF1 = {
.stream = {FIELD1_TEMPLATE_VALUE, FIELD2_TEM...},
.pin = &EHAL_PIN_RF1
};