c - #includes 在 C 文件中用于处理器特定的实现

标签 c include target multitargeting

我正在开发专门为一种嵌入式处理器编写的“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)。 cled_pic.c).

管理多个平台源文件的常用方法是将每组平台实现文件放在它们自己的目录中,因此您可能有avr/led.cpic/led。 c(以及 avr/gpio.cpic/gpio.c 等)。

关于c - #includes 在 C 文件中用于处理器特定的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851806/

相关文章:

c - C 中窗口中未出现的交互式输入

CURLOPT_ 定义

c++ - 多个类中使用的函数

c - vector 点积计算错误和

我们可以使用头文件而不指定其 .h 扩展名吗

c++ - 如何管理多个文件、全局变量和定义

javascript - 在 #DIV 上调用函数而不是 window()

html - 使用 :target 更改多个元素的 CSS

java - 通过 ANT Build 将参数传递给 JAVA main

c - 如何通过 mount(2) 函数挂载带有子挂载的目录?