一、實驗目的
掌握建立μC/OS-III實驗環境的方法。
初步了解μC/OS-III任務管理函數。
初步了解μC/OS-III的結構以及與應用程序之間的關系。
二、實驗內容
建立VS2012或VS2013或VS2017開發平臺。
創建兩個任務并交替運行,在屏幕上顯示當前運行狀態。
三、實驗過程、結果
1.實驗步驟及內容
(1)搭建VS平臺;
圖3.1 VS2015平臺界面
Micrium_Win32_OS3的對應版本是VS2013,Micrium_Win32_Kernels的對應版本是VS2017,而我的版本是VS2015,故而都嘗試了一下。
VS2015運行Micrium_Win32_Kernels時報錯界面如下:
圖3.2 報錯界面
具體報錯內容為:
1>------ 已啟動生成: 項目: OS3, 配置: Debug Win32 ------
1>C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5):error MSB8020: The build tools for v141 (Platform Toolset = 'v141') cannot befound. To build using the v141 build tools, please install v141 buildtools. Alternatively, you may upgrade tothe current Visual Studio tools by selecting the Project menu or right-clickthe solution, and then selecting "Retarget solution".
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========
按照提示我進行了重新生成解決方案,并沒有解決問題。于是嘗試用VS2015對VS2012版本對應的包進行編譯執行。
VS2015打開Micrium_Win32_OS3時顯示如下界面:
圖3.2 升級詢問界面
因此,點擊確定后對原本的VC++編譯器和庫進行升級即可,VS平臺搭建成功。
(2)創建任務
CPU總是不斷地在各個任務間切換,為了下次跳回來, CPU在跳走的同時,要保護好現場,故而需要用到堆棧。
給任務分配堆棧:
所以每當我們創建一個任務,我們都需要給這個任務分配一個堆棧。
#define APP_TASK_STK_SIZE 256u
(CPU_STK_SIZE)APP_TASK_STK_SIZE
創建任務用到OSTaskCreate()函數
OSTaskCreate((OS_TCB *)&AppStartTCB, //任務控制塊指針
(CPU_CHAR *)"AppStart", //任務名稱
(OS_TASK_PTR)AppStart, //任務代碼指針
(void *)0, //傳遞給任務的參數parg
(OS_PRIO)APP_START_PRIO, //任務優先級
(CPU_STK *)&AppStartStk[0], //任務堆;刂
(CPU_STK_SIZE)APP_TASK_STK_SIZE / 10u, //堆棧剩余警戒線,使用90%堆棧時溢出檢查
(CPU_STK_SIZE)APP_TASK_STK_SIZE, //堆棧大小
(OS_MSG_QTY)0u, //可接收的最大消息隊列數
(OS_TICK)0u, //時間片輪轉時間
(void *)0, //任務控制塊擴展信息
(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //檢查堆棧以及堆棧值清零
(OS_ERR *)&err); //返回值
其中,#define APP_START_PRIO 7u
表示該任務的優先級是7,數字越小,表示任務的優先級越高。
任務創建完畢,編寫AppStart。
在AppStart創建二個簡單的任務:TaskA和TaskB,設置AppStart 1秒執行一次,TaskA 3秒執行一次,TaskB 5秒執行一次,并進行打印任務優先級和系統時間。
其中用OSTimeDlyHMSM()函數進行延時。
(3)編譯執行,在屏幕上顯示運行狀態;
實驗結果分析:
可以看出,Start任務優先級為7,每隔一秒鐘執行一次;TaskA任務優先級為8,每隔3秒執行一次;TaskB任務優先級為9,每隔5秒運行一次。任務交替運行,符合預期結果。
|