uC/OS-II原始碼解析(ucos_ii.c)
阿新 • • 發佈:2019-02-04
/*
** ver: 2.52
** file: uCOS_II.C
** brief: C檔案集合
*/
#define OS_GLOBALS /* 宣告全域性變數 防止重複定義 */
#include "includes.h" /* 包含"includes.h"標頭檔案 */
#define OS_MASTER_FILE /* 防止以下檔案重複定義巨集OS_GLOBALS和重複包含"includes.h" */
#include "\software \ucos-ii\source\os_core.c" /* 包含 "os_core.c" 檔案 */
#include "\software\ucos-ii\source\os_flag.c" /* 包含 "os_flag.c" 檔案 */
#include "\software\ucos-ii\source\os_mbox.c" /* 包含 "os_mbox.c" 檔案 */
#include "\software\ucos-ii\source\os_mem.c" /* 包含 "os_mem.c" 檔案 */
# include "\software\ucos-ii\source\os_mutex.c" /* 包含 "os_mutex.c" 檔案 */
#include "\software\ucos-ii\source\os_q.c" /* 包含 "os_q.c" 檔案 */
#include "\software\ucos-ii\source\os_sem.c" /* 包含 "os_sem.c" 檔案 */
#include "\software\ucos-ii\source\os_task.c" /* 包含 "os_task.c" 檔案 */
# include "\software\ucos-ii\source\os_time.c" /* 包含 "os_time.c" 檔案 */
1. OS_GLOBALS栗子
ucos_ii.h檔案有如下定義:
. . .
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif
. . .
OS_EXT INT32U OSCtxSwCtr;
. . .
includes.h檔案中有如下定義:
#include "ucos_ii.h"
os_core.c檔案有如下定義:
. . .
#define OS_GLOBALS
#include "includes.h"
. . .
因為os_core.c中定義了OS_GLOBALS這個巨集,所以OS_EXT巨集為空,即os_core.c檔案編譯結果如下
INT32U OSCtxSwCtr;
結果是在檔案os_core.c中定義變數OSCtxSwCtr,其他.c檔案不會定義巨集OS_GLOBALS,所以OS_EXT的值為extern,即其他.c檔案編譯時結果如下:
extern INT32U OSCtxSwCtr;
結果是在其他.c中宣告變數,因為變數已經定義過了呀呀呀!
2. uCOS_II.C檔案
說明:如果你的工程中添加了uCOS_II.C檔案,則不要新增該檔案下包含的那些C檔案否則會出現重複定義錯誤,如果添加了各C檔案則不要新增uCOS_II.C檔案,這個故事告訴我們老婆與小三不能兼得【羞澀】