uC OS II原始碼解析 ucos ii c

2021-09-17 07:55:17 字數 2058 閱讀 5954

**:

/*

** 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" 檔案 */

ucos_ii.**件有如下定義:

. . .

#ifdef os_globals

#define os_ext

#else

#define os_ext extern

#endif

. . .

os_ext int32u osctxswctr;

. . .

includes.**件中有如下定義:

#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檔案,這個故事告訴我們老婆與小三不能兼得【羞澀】

uC OS II原始碼解析 includes h

ver 2.52 file includes.h brief 標頭檔案集合,其他.c檔案都會包括該標頭檔案 include 包含 stdio.h c標準函式庫標頭檔案 include 包含 string.h c標準函式庫標頭檔案 include 包含 ctype.h c標準函式庫標頭檔案 inclu...

uC OS II原始碼解析 includes h

ver 2.52 file includes.h brief 標頭檔案集合,其他.c檔案都會包括該標頭檔案 include 包含 stdio.h c標準函式庫標頭檔案 include 包含 string.h c標準函式庫標頭檔案 include 包含 ctype.h c標準函式庫標頭檔案 inclu...

uC OS II原始碼分析(四)

核心結構 1,臨界區,os enter critical 和os exit critical 為了處理臨界區 必須關中斷,等處理完畢後,再開中斷。關中斷可以避免其他任務或中斷進入臨界區 uc os ii 定義了這兩個巨集來實現,但注意一條 呼叫 uc os ii 功能函式時,中斷應該總是開著的。1 ...