我正在开发专门为一种嵌入式处理器编写的“C”代码库。我为 LED、GPIO 线路和 ADC(使用结构等)等编写了通用的“伪面向对象”代码。我还编写了大量代码,以与硬件/目标无关的方式利用这些“对象”。
我们现在正在混合使用另一种处理器类型,我想保留当前的代码结构,这样我仍然可以使用更高级别的库。但是,我确实需要为较低级别的代码(LED、GPIO、ADC)提供不同的实现。
我知道.C 文件中的#includes 通常被看不起,但在这种情况下,它合适吗?例如:
// led.c
#ifdef TARGET_AVR
#include "led_avr.c"
#elseifdef TARGET_PIC
#include "led_pic.c"
#else
#error "Unspecified Target"
#endif
如果这不合适,什么是更好的实现方式?
谢谢!
最佳答案
由于链接器并不关心源文件的实际名称是什么(它只关心导出的符号),您可以为每个目标更改链接器命令行以命名适当的实现模块(led_avr.h)。 c
或 led_pic.c
).
管理多个平台源文件的常用方法是将每组平台实现文件放在它们自己的目录中,因此您可能有avr/led.c
和pic/led。 c
(以及 avr/gpio.c
和 pic/gpio.c
等)。
关于c - #includes 在 C 文件中用于处理器特定的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851806/