2010-10-03 32 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文件。

相關問題