Есть много способов выполнить то, что вы хотите, но следует отметить, что если драйверы для обоих MCU имеют одинаковый интерфейс (согласно вашему вопросу), то было бы абсолютно бессмысленно включать разные заголовки на основе разных MCU.#defines.Если вы хотите, чтобы решение основывалось на #define, вы можете, например, сделать:
Заголовок (some_driver.h):
// init.
void some_driver_init(struct init_params ip);
// start driver
void some_driver_start();
Реализация "Fake" (some_driver.c):
#if defined(ARM_CORTEX_M3)
#include "some_driver_arm_m3.c"
#elif defined(TI_MSP430)
#include "some_driver_msp430.c"
#elif defined(...)
//... and so on...
#else
#pragma warning "MCU NOT SUPPORTED!"
#endif
Затем «реальная» реализация для каждого MCU:
some_driver_arm_m3.c
// init. M3 Cortex driver
void some_driver_init(struct init_params ip)
{
// actual M3 implementation goes here
}
// start M3 Cortex driver
void some_driver_start()
{
// actual M3 implementation goes here
}
some_driver_msp430.c
// init. MSP430 driver
void some_driver_init(struct init_params ip)
{
// actual MSP430 implementation goes here
}
// start MSP430 driver
void some_driver_start()
{
// actual MSP430 implementation goes here
}
... ии так далее.