ucos-II操作系統


19.1 操作系統介紹

UC/OS-II 中最多可以支持64 個任務,分別對應優先級0~63,其中0 為最高優先級。63為最低級,系統保留了4個最高優先級的任務和4個最低優先級的任務,所有用戶可以使用的任務數有56個.

19.1.1 操作系統簡介

什么是操作系統

操作系統是管理和控制計算機硬件與軟件資源的計算機程序,是直接運行在“裸機”上的最基本的系統軟件,任何其他軟件都必須在操作系統的支持下才能運行。介於APP和硬件之間。

19.1.1 常見的操作系統

常見的操作系統:

IOS(蘋果)、安卓()WindowsLinux、塞班、UCOSFreeRTOSRT-T(國產)VxworkseCos等等。

 實時操作系統(RTOS)

 UCOS(學習免費,商用需要注冊)、FreeRTOSRT-T(國產)VxworkseCos

 會給每個任務一個基礎的時間長度,根據任務的需求適當調整任務時長。任務與任務直接切換都有相應的規則。

 分時操作系統

 Windows----2000以前、Linux----2.6以前

 給每一個任務分配一個固定的時長,如果這個任務在固定的時長內已經空閑,分時操作系統還是會給該任務規定好的時長。

 半實時操作系統

 Windows----7/8/10Linux----2.6以后

19.1 UCOS操作系統介紹

19.1.1  操作系統的調度原則

UCOS操作系統調度原則是:以任務優先級為調度原則。任務優先級編號越小的,任務優先級越高。
注意點:每個任務只有一個優先級,不同任務優先級編號不能一致。

19.1.1  操作系統的程序結構

沒有操作系統時

整個裸機項目工程中有且僅有一個死循環,這個死循環存在main函數中。其它地方可以有死循環但是必須要有退出條件。

有操作系統時

整個操作系統項目工程中可以有多個死循環,每個任務中有一個死循環,main函數中無死循環。

注意點:操作系統在main中必須完成兩點:①設定好操作系統心跳節拍;②創建一個任務(該任務必須創建成功)。

19.1.1  操作系統的任務調度

任務調度:指的是什么時候會發生任務調度。

兩種情況下會發生任務調度。

操作系統的心跳節拍到達。心跳節拍稱為一個TickUCOS中有一個專用的操作系統心跳節拍函數:OSTimeTick();

操作系統中的程序代碼調用OS_Sched();該函數時會產生任務調度。OS_Sched():稱為任務調度函數。

注意:任務調度函數我們不能夠直接調用,只能是操作系統調用。程序員調用該函數會使得UCOS操作系統崩潰。

注意點①:操作系統發生任務調度不一定切換任務;任務切換一定需要產生任務調度。

注意點②:操作系統中高優先級任務必須要有釋放CPU控制權函數調用。

19.1.1  操作系統的任務狀態

UCOS操作系統中,任務狀態有五種:停止/休眠、准備就緒、運行、掛起/等待、中斷。只有當任務進入到運行狀態才可以執行任務中的程序代碼。

 

停止:任務被刪除。
休眠:當前沒有任何一個任務准備就緒,運行狀態中沒有任務執行。
准備就緒:任務運行需要滿足的條件都准備完成。
運行:任務正在運行。
掛起:任務需要等待某一個條件發生,其他任務可以將這個任務掛起。
等待:延時相關的。
中斷:程序發生了中斷事件,CPU要去處理中斷服務函數,中斷操作系統。

 

 

 

19.1.1  操作系統的任務中斷

中斷狀態中需要注意以下幾點:
從運行狀態進入中斷狀態必須要調用函數OSIntEnter();該函數的功能是用來告訴操作系統當前程序進入中斷。
從中斷狀態退出后進入運行狀態之前必須調用函數OSIntExit();該函數的功能是用來告訴操作系統當前程序退出中斷。

程序從中斷中退出,操作系統返回到任務中去,這時不一定返回到原來的任務中。

 

 

 

 1 /*
 2 函數功能:初始化系統滴答定時器
 3 函數形參:任意毫秒
 4 函數返回值:無
 5 備注:控制操作系統的心跳節拍----中斷方式
 6 作者:李工
 7 時間:2018-09-19
 8 */
 9 void SysTick_Init(u16 n_ms)
10 {
11     SysTick->CTRL = 0;//清空配置
12     //選擇時鍾源為21MHz
13     
14     SysTick->VAL = 0;
15     
16     SysTick->LOAD = n_ms * 21000;
17     
18     SysTick->CTRL |= (0X1 << 1);//開啟模塊級中斷使能
19     
20     SysTick->CTRL |= (0X1 << 0);//開啟遞減計數器--使能
21 }
22 
23 /*
24 函數功能:系統滴答定時器的中斷服務函數
25 函數形參:無
26 函數返回值:無
27 備注:告訴操作系統進中斷、出中斷、心跳節拍函數
28 作者:李工
29 時間:2018-09-19
30 */
31 void SysTick_Handler(void)
32 {
33     OSIntEnter();//進中斷
34     
35     if(SysTick->CTRL & (0X1 << 16))
36     {
37         OSTimeTick();//心跳節拍函數
38     }
39     
40     OSIntExit();//出中斷
41 }
42 
43 /*
44 函數功能:主函數
45 函數形參:無
46 函數返回值:整型
47 備注:使用UCOS操作系統
48 
49 */
50 int main(void)
51 {
52     //初始化系統滴答定時器
53     SysTick_Init(1000 / OS_TICKS_PER_SEC);
54     //初始化操作系統
55     OSInit();
56     //創建一個任務
57     OSTaskCreate(os_start_task,NULL,&OS_STK_START_TASK_SIZE[OS_STK_START_TASK_LENGTH - 1],OS_START_TASK_PRIO);
58     //啟動操作系統
59     OSStart();
60     //如果任務創建失敗則執行這個無限循環
61     while(1)
62     {
63         ;
64     }
65 }
UCOS操作系統必要代碼

 

 1 INT8U  OSTaskCreate (void   (*task)(void *p_arg),
 2                      void    *p_arg,
 3                      OS_STK  *ptos,
 4                      INT8U    prio)
 5 函數功能:創建一個任務
 6 函數形參:void   (*task)(void *p_arg):函數指針,用來存放任務函數
 7         void    *p_arg:任務函數的形參傳遞,如果無形參傳遞使用NULL即可
 8         OS_STK  *ptos:任務的任務棧的棧頂
 9         INT8U    prio:任務的優先級編號
10 函數返回值:OS_ERR_NONE:表示創建成功;否則表示失敗
11 使用方法:
12 OSTaskCreate(os_start_task,NULL,&OS_STK_START_TASK_SIZE[OS_STK_START_TASK_LENGTH - 1],OS_START_TASK_PRIO);
13 任務的具體實現:
14 #define OS_START_TASK_PRIO 10
15 #define OS_STK_START_TASK_LENGTH 256
16 OS_STK OS_STK_START_TASK_SIZE[OS_STK_START_TASK_LENGTH];
17 
18 /*
19 函數功能:啟動任務
20 函數形參:萬能指針
21 函數返回值:無
22 備注:無
23 作者:李工
24 時間:2018-09-19
25 */
26 void os_start_task(void *p_arg)
27 {
28     
29     while(1)
30     {
31         
32     }
33 }
UCOS操作系統創建任務

 

19.1  UCOS操作系統任務管理

19.4.1ucos任務組成

任務控制塊(底層,不需要掌握)、任務優先級,任務棧,任務函數。

任務控制塊:當創建一個任務的時候,ucos會分配一段內存空間給這個任務,這段內存空間就稱為任務控制塊。任務控制塊記錄了任務的相關信息:任務函數地址、任務的優先級、任務狀態、任務棧地址。
任務優先級:每個任務都有一個唯一的優先級,優先級也只我們這個任務在ucos中的唯一標識,任務的優先級是ucos做任務調度的依據。
任務棧:當任務切換的時候保存該任務的狀態(切換之前執行到哪里了,局部變量)。
任務函數:當任務被調度的時候,要完成的工作。

19.1  UCOS操作系統任務間通信

19.1.1  信號量

(保護那段代碼不被別的進程搶走)
作用:保護共享資源。
信號量:在UCOS操作系統里面就相當於一個全局變量,釋放信號量讓這個信號量的值加1,使用信號量讓這個信號量的值減1。最小值為0。

19.1.1  消息郵箱

19.1.1  消息隊列

19.1.1  互斥信號量

19.1  UCOS操作系統事件標志組

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM