2010-10-03 108 views
3

我正在研究专门为某种类型的嵌入式处理器编写的'C'代码库。我已经为LED,GPIO线路和ADC(使用结构等)编写了通用的“伪面向对象”代码。我还写了大量代码,以硬件/目标不可知的方式利用这些“对象”。#包含在C文件中用于特定处理器的实现

我们现在正在将另一种处理器类型扔进混合中,我想保留当前的代码结构,以便仍然可以使用更高级别的库。但是,我确实需要为较低级别的代码(LED,GPIO,ADC)提供不同的实现。

我知道#include中的.C文件通常是被低估的,但在这种情况下,它是否合适?例如:

// led.c 
#ifdef TARGET_AVR 
#include "led_avr.c" 
#elseifdef TARGET_PIC 
#include "led_pic.c" 
#else 
#error "Unspecified Target" 
#endif 

如果这不合适,有什么更好的实施?

谢谢!

回答

3

由于链接不关心什么是源文件的名称实际上是(只关心出口符号),你可以改变你的链接器命令行对每个目标命名相应的实现模块(led_avr.cled_pic.c)。

管理多个平台的源文件的常用方式是把每一组的平台实现文件在自己的目录,所以你可能有avr/led.cpic/led.c(和avr/gpio.cpic/gpio.c等)。

2

这很好。您可以使用其他的技巧,如:

#ifdef PROC1 
#define MULTI_CPU(a,b) (a) 
#else 
#define MULTI_CPU(a,b) (b) 
#endif 
0

更常见的做法是,不用编译C文件,而是更改编译系统(不管它是什么)来编译或不编译这些特定的C文件。

相关问题