Обычный С.
В системе есть несколько идентичных узлов (управление температурой, двигатели), описываемых структурами переменных. Стоит задача сокращения текста программы. Вариантов три - макросы, функции и их комбинации.
Вначале сделал вариант с макросами, и он работает
Код
#define MOTOR_SERVICE(OBJ, MOT) \
if (!OBJ##.time) \
{ PWM##MOT=PWM_TOP+1; HIGH_MODE##MOT; \
OBJ##.state=moSTOPPED; \
} \
else { if (OBJ##.speed==0) \
{ PWM##MOT=PWM_TOP+1; HIGH_MODE##MOT; \
ну и так далее...
В этом макросе параметры - имя структуры и номер, который служит для обращения к нужным портам через другие макросы.
Но у макросов есть недостатки:
- трудность отладки (в отладчике IAR в этом случае нет привязки к строкам кода С)
- трудности привязки ошибки компиляции к месту в макросе
- ну и размер кода, конечно.
Хотелось бы использовать функции с параметром указателя на структуру, причем чтобы и работа с портами легко укладывалась в этот стройный подход.
Вопрос - как это сделать красиво, если там разные входы, выходы, и собственно сами регистры.
Добавить с структуру указатели на функции? Добавить в параметры функции индекс, который использовать для выбора функций работы с портами из массива, как в примере макроса?
Может, что-то еще?
Уходя, оставьте свет...