在看uCOS II V2.91版本源代碼時,在ucos_ii.c源文件中發現下面的代碼:
1 #include <os_core.c> 2 #include <os_flag.c> 3 #include <os_mbox.c> 4 #include <os_mem.c> 5 #include <os_mutex.c> 6 #include <os_q.c> 7 #include <os_sem.c> 8 #include <os_task.c> 9 #include <os_time.c> 10 #include <os_tmr.c>
在之前,我將ucos_ii.c與上面的os_core.c等都添加到工程編譯,出現許多“重復定義”的錯誤。
之后,將os_core.c等文件都從工程中移除,只保留ucos_ii.c,則編譯通過!
我們知道,通過#include "*.h"可以引用其它源文件中導出的符號,
而通過使用#include "*.c"文件可以控制要將哪些源文件編譯到工程中。
比如,這里如果不需要消息郵箱功能和互斥信號功能,則將對應的.c文件注釋即可,
#include <os_core.c> #include <os_flag.c> //#include <os_mbox.c> #include <os_mem.c> //#include <os_mutex.c> #include <os_q.c> #include <os_sem.c> #include <os_task.c> #include <os_time.c> #include <os_tmr.c>
因此,在大型的項目中,如果我們要測試不同的功能,可以為每個功能建立一個.c類型的配置文件,在該配置文件中將需要編譯的功能.c文件#include進來就OK,而不用麻煩地在每次測試不同功能時都重復的把舊的功能文件刪除,再添加新的功能文件。
通過控制要編譯的文件,可以減少最終生成代碼的代碼段長度,節省存儲空間。
許多程序設計人員沒有絲毫的節省存儲空間的概念,經常把與工程無關的文件包含到工程中。