我傾向於將特定於硬件的#define移動到每個平臺的一個頭文件中,然後在所有源文件包含的「platform.h」文件中選擇它。
platform.h:
#if defined PLATFORM_X86_32BIT
#include "Platform_X86_32Bit.h"
#elsif defined PLATFORM_TI_2812
#include "Platform_TI_2812.h"
#else
#error "Project File must define a platform"
#endif
架構特定的頭文件將包含兩件事情。
1)所有常見整數大小的Typedef,如typedef short int16_t;
請注意,c99指定了具有這些預定義的'stdint.h'。 (切勿在便攜式代碼中使用原始的int
)。
2)所有硬件特定行爲的函數頭或宏。通過提取所有的依賴關係的功能,代碼的主體保持清潔:
//example data receive function
HW_ReceiverPrepare();
HW_ReceiveBytes(buffer, bytesToFetch);
isGood = (Checksum(buffer+1, bytesToFetch-1) == buffer[0])
HW_ReceiverReset();
然後一個平臺特定的報頭可以提供原型複雜HW_ReceiverPrepare()
功能,而另一種簡單地與#define HW_ReceiverPrepare()
定義它遠在您的評論中描述的情況下,這種情況非常有效,其中平臺之間的差異通常爲一行或兩行。只需將這些行封裝爲函數/宏調用,並且可以保持代碼可讀性,同時最大限度地減少重複。
有沒有人有不同的硬件有不同分支的程序的單元測試經驗,如何覆蓋不同的路徑?謝謝。 –