コンパイルスイッチによる置き換え
プロダクトコードでマイコンやハードウェアに依存している箇所をコンパイルスイッチで分岐させ、それぞれの環境で使える関数を呼び出すようにする方法で す。 テストのためにプロダクトコードに変更を加えており、プロダクトコードが複雑になってしまうためこの方法は避けたほうが良いです。
プロダクトコード ledCtrl.c
#include ledCtrl.h
static void turnOnRedLED(void) {
#if REAL_BOARD
Led_ON(3);
#else
Virtual_Led_ON(3);
#endif
}
プロダクトコード用のled.c
static uint8_t led_value;
static volatile uint8_t *ledResisterAdr;
// レジスタに値をセット
void Led_ON(uint8_t ledNo) {
led_value = led_value | (1 << ledNo);
*ledResisterAdr = led_value;
}
テストコード用の led.c
void Virtual_Led_ON(uint8_t ledNo) {
printf("virtual led%d turned ON\n", ledNo);
}