標籤:
#1 核心對象的靜態執行個體化
核心對象的靜態執行個體化任務的靜態執行個體化
VX_TASK宏用來在編譯時間聲明一個任務對象。該宏帶有2個參數:任務名和棧大小。不像taskSpawn函數,任務名稱可以是NULL。VX_TASK的任務名稱必須指定。棧大小是非零值並且是編譯時間常量。
VX_TASK_INSTANTIATE宏被VX_TASK用來初始化和建立任務,等價於taskSpawn函數的功能。VX_TASK_INITIALIZE宏杯VX_TASK初始化任務並讓任務處於SUSPEND狀態,直到稍後調用taskActivate函數來啟用。
VX_TASK_INSTANTIATE返回傳起的任務ID,或者錯誤碼。VX_TASK和VX_TASK_INITIALIZE必須使用相同的任務名。
#include <vxWorks.h>#include <taskLib.h>VX_TASK(myTask,4096);int myTaskId;STATUS initializeFunction (void) { myTaskId = VX_TASK_INSTANTIATE(myTask, 100, 0, 4096, pEntry, 0,1,2,3,4,5,6,7,8,9); if (myTaskId != ERROR) return (OK); /* instantiation succeeded */ else return (ERROR); }
為了初始化任務並使它處於SUSPEND狀態,必須使用VX_TASK_INITALIZE宏。並在稍後使用taskActivate函數來運行該任務。VX_TASK_INSTANIATE和taskActivate使用相同的參數。
#include <vxWorks.h>#include <taskLib.h>VX_TASK(myTask,4096);int myTaskId;STATUS initializeFunction (void){ myTaskId = VX_TASK_INITIALIZE(myTask, 100, 0, 4096, pEntry, 0,1,2,3,4,5,6,7,8,9); if (myTaskId != NULL) { taskActivate (myTaskId); return (OK); } else return (ERROR);}
更多資訊,請參閱taskLib的API手冊。
訊號量的靜態執行個體化
VX_BINARY_SEMAPHORE,VX_COUNTING_SEMAPHORE,VX_MUTEX_SEMAPHORE和VX_READ_WRITE_SEMAPHORE宏分別用來在編譯時間定義二進位訊號量、計數訊號量、互斥訊號量。這些必須以訊號量名稱作為參數。
這些訊號量通過semBInitialize,semCInitialzie,semMInitialize和semRWInitialize函數來初始化定義的訊號量。semXInitialize函數等價於semXCreate函數。
VX_XXX_SEMAPHORE和semXInitialize函數必須使用相同的訊號量名稱。semXInitialize函數返回訊號量的ID。
#include <vxWorks.h>#include <semLib.h>VX_BINARY_SEMAPHORE(mySemB); /* declare the semaphore */SEM_ID mySemBId; /* semaphore ID for further operations */STATUS initializeFunction (void){ if ((mySemBId = semBInitialize (mysemB, options, 0)) == NULL) return (ERROR); /* initialization failed */ else return (OK);}訊息佇列的靜態執行個體化
VX_MSG_Q用來在編譯時間聲明訊息佇列對象。帶有3個參數:名稱,訊息佇列最大數量及每個訊息的最大尺寸。msgQInitialize函數在運行時初始化訊息佇列使之可用。宏和函數的參數必須保持一致。
#include <vxWorks.h>#include <msgQLib.h>VX_MSG_Q(myMsgQ,100,16); /* declare the msgQ */MSG_Q_ID myMsgQId; /* MsgQ ID to send/receive messages */STATUS initializeFunction (void){ if ((myMsgQId = msgQInitialize (myMsgQ, 100, 16, options)) == NULL) return (ERROR); /* initialization failed */ else return (OK);}看門狗時鐘的靜態執行個體化
VX_WDOG在編譯時間聲明看門狗時鐘。帶有一個參數,看門狗名稱。wdInitialize函數在運行時初始化看門狗時鐘。
#include <vxWorks.h>#include <wdLib.h>VX_WDOG(myWdog); /* declare the watchdog */WDOG_ID myWdogId; /* watchdog ID for further operations */STATUS initializeFunction (void){ if ((myWdogId = wdInitialize (myWdog)) == NULL) return (ERROR); /* initialization failed */ else return (OK);}
VxWorks 6.9 核心編程指導之讀書筆記 -- VxWorks Kernel application (二)