我倾向于将特定于硬件的#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()
定义它远在您的评论中描述的情况下,这种情况非常有效,其中平台之间的差异通常为一行或两行。只需将这些行封装为函数/宏调用,并且可以保持代码可读性,同时最大限度地减少重复。
有没有人有不同的硬件有不同分支的程序的单元测试经验,如何覆盖不同的路径?谢谢。 –