標題: 單片機的Ucous-II操作系統(tǒng)——事件 [打印本頁]
作者: LDKA 時間: 2020-11-13 22:19
標題: 單片機的Ucous-II操作系統(tǒng)——事件
本內(nèi)容來自網(wǎng)絡(luò)轉(zhuǎn)載:
1、任務(wù)介紹任務(wù),其實就是一個死循環(huán)函數(shù),該函數(shù)實現(xiàn)一定的功能,一個工程可以有很多這
樣的任務(wù)(最多 255 個),UCOSII對這些任務(wù)進行調(diào)度管理,讓這些任務(wù)可以并發(fā)工作
(注意不是同時工作!!,并發(fā)只是各任務(wù)輪流占用 CPU,而不是同時占用,任何時候還是只有 1個任務(wù)能夠占用 CPU), 這就是 UCOSII 最基本的功能。 Ucos 任務(wù)的一般格式為:
void MyTask (void *pdata)
{
任務(wù)準備工作…While(1)//死循環(huán)
{ 任務(wù) MyTask 實體代碼;
OSTimeDlyHMSM(x,x,x,x);//調(diào)用任務(wù)延時函數(shù),釋放 cpu 控制權(quán),
}
}
2. 任務(wù)優(yōu)先級ucos 中,每個任務(wù)都有唯一的一個優(yōu)先級,優(yōu)先級是任務(wù)的唯一標識
在 UCOSII 中,使用 CPU的時候,優(yōu)先級高(數(shù)值小)的任務(wù)比優(yōu)先級低的任務(wù)具有優(yōu)先使用權(quán),即任務(wù)就緒表中總是優(yōu)先級最高的任務(wù)獲得 CPU 使用權(quán),只有高優(yōu)先級
的任務(wù)讓出 CPU 使用權(quán)(比如延時)時,低優(yōu)先級的任務(wù)才能獲得 CPU 使用權(quán)
UCOSII 不支持多個任務(wù)優(yōu)先級相同,也就是每個任務(wù)的優(yōu)先級必須不一樣
3. 任務(wù)堆棧就是存儲器中的連續(xù)存儲空間。為了滿足任務(wù)切換和響應(yīng)中斷時保存 CPU 寄存
器中的內(nèi)容以及任務(wù)調(diào)用其他函數(shù)時的需要,每個任務(wù)都有自己的堆棧。在創(chuàng)建任務(wù)的時候,任務(wù)堆棧是任務(wù)創(chuàng)建的一個重要入口參數(shù)
4. 任務(wù)控制塊任務(wù)控制塊 OS_TCB,用來記錄任務(wù)堆棧指針,任務(wù)當前狀態(tài)以及任務(wù)優(yōu)先級等任務(wù)屬性
UCOSII 的任何任務(wù)都是通過任務(wù)控制塊(TCB)的東西來控制的,一旦任務(wù)創(chuàng)建了,任務(wù)控制塊 OS_TCB 就會被賦值
每個任務(wù)管理塊有 3 個最重要的參數(shù):1,任務(wù)函數(shù)指針;2,任務(wù)堆棧指針;3,任務(wù)優(yōu)先級;任務(wù)控制塊就是任務(wù)在系統(tǒng)里面的身份證( UCOSII 通過優(yōu)先級識
別任務(wù))
5. 任務(wù)就緒表用來記錄系統(tǒng)中所有處于就緒狀態(tài)的任務(wù)。它是一個位圖,系
統(tǒng)中每個任務(wù)都在這個位圖中占據(jù)一個進制位,該位置的狀態(tài)( 1 或者 0)就表示任務(wù)是否處于就緒狀態(tài)
6. 任務(wù)調(diào)度任務(wù)調(diào)度的作用一是在任務(wù)就緒表中查找優(yōu)先級最高的就緒任務(wù),二是實現(xiàn)任務(wù)的切換。
比如說,當一個任務(wù)釋放cpu控制權(quán)后,進行一次任務(wù)調(diào)度,這個時候任務(wù)調(diào)度器首先要去任務(wù)就緒表查詢優(yōu)先級最高的就緒任務(wù),查到之后,進行一次任務(wù)切換,轉(zhuǎn)而去執(zhí)行下一個任務(wù)
7、任務(wù)狀態(tài)UCOSII 的每個任務(wù)都是一個死循環(huán)。每個任務(wù)都處在以下 5 種狀態(tài)之一的狀態(tài)下,這 5
種狀態(tài)是:睡眠狀態(tài)、就緒狀態(tài)、運行狀態(tài)、等待狀態(tài)(等待某一事件發(fā)生)和中斷服務(wù)狀態(tài)
睡眠狀態(tài),任務(wù)在沒有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時的狀態(tài)。
就緒狀態(tài),系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進行了就緒登記,任務(wù)已經(jīng)準
備好了,但由于該任務(wù)的優(yōu)先級比正在運行的任務(wù)的優(yōu)先級低, 還暫時不能運行,這時任務(wù)的
狀態(tài)叫做就緒狀態(tài)。
運行狀態(tài),該任務(wù)獲得 CPU 使用權(quán),并正在運行中,此時的任務(wù)狀態(tài)叫做運行狀態(tài)。
等待狀態(tài),正在運行的任務(wù),需要等待一段時間或需要等待一個事件發(fā)生再運行時,該任
務(wù)就會把 CPU 的使用權(quán)讓給別的任務(wù)而使任務(wù)進入等待狀態(tài)。
中斷服務(wù)狀態(tài),一個正在運行的任務(wù)一旦響應(yīng)中斷申請就會中止運行而去執(zhí)行中斷服務(wù)程
序,這時任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)。
8、 建立任務(wù)函數(shù)OSTaskCreat
函數(shù)原型:
OSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INTU prio);
task:是指向任務(wù)代碼的指針;
pdata:是任務(wù)開始執(zhí)行時,傳遞給任務(wù)的參數(shù)的指針;
ptos:是分配給任務(wù)的堆棧的棧頂指針;
prio 是分配給任務(wù)的優(yōu)先級
每個任務(wù)都有自己的堆棧,堆棧必須申明為 OS_STK 類型,并且由連續(xù)的內(nèi)存空間組
成
9、任務(wù)刪除函數(shù)所謂的任務(wù)刪除,其實就是把任務(wù)置于睡眠狀態(tài),并不是把任務(wù)代碼給刪除了。 UCOSII
提供的任務(wù)刪除函數(shù)原型為:
INT8U OSTaskDel(INT8U prio);
· 1
· 2
prio 就是我們要刪除的任務(wù)的優(yōu)先級,可見該函數(shù)是通過任務(wù)優(yōu)先級來實現(xiàn)
任務(wù)刪除的
特別注意:任務(wù)不能隨便刪除,必須在確保被刪除任務(wù)的資源被釋放的前提下才能刪
除!
10、請求任務(wù)刪除函數(shù)通過向被刪除任務(wù)發(fā)送刪除請求,來實現(xiàn)任務(wù)釋放自身占用資源后再刪除。 UCOSII 提供的請求刪除任務(wù)函數(shù)原型為:
INT8U OSTaskDelReq(INT8U prio);
11、 改變?nèi)蝿?wù)優(yōu)先級函數(shù)INT8U OSTaskChangePrio(INT8U oldprio,INT8U newprio);
12、任務(wù)掛起函數(shù)與恢復(fù)函數(shù)任務(wù)掛起和任務(wù)刪除有點類似,但是又有區(qū)別,任務(wù)掛起只是將被掛起任務(wù)的就緒標
志刪除,并做任務(wù)掛起記錄,并沒有將任務(wù)控制塊任務(wù)控制塊鏈表里面刪除, 也不需要釋
放其資源, 而任務(wù)刪除則必須先釋放被刪除任務(wù)的資源,并將被刪除任務(wù)的任務(wù)控制塊也
給刪了。被掛起的任務(wù),在恢復(fù)(解掛)后可以繼續(xù)運行。 UCOSII 提供的任務(wù)掛起函數(shù)
原型為:
INT8U OSTaskSuspend(INT8U prio);
有任務(wù)掛起函數(shù),就有任務(wù)恢復(fù)函數(shù),通過該函數(shù)將被掛起的任務(wù)恢復(fù),讓調(diào)度器能
夠重新調(diào)度該函數(shù)。 UCOSII 提供的任務(wù)恢復(fù)函數(shù)原型為:
INT8U OSTaskResumeOSTaskResume(INT8U prio)
13、 STM32上運行ucos 使用任務(wù)1. 編寫任務(wù)函數(shù)并設(shè)置其堆棧大小和優(yōu)先級等參數(shù)//START 任務(wù)//設(shè)置任務(wù)優(yōu)先級#define START_TASK_PRIO 10 //開始任務(wù)的優(yōu)先級設(shè)置為最低//設(shè)置任務(wù)堆棧大小#define START_STK_SIZE 64//任務(wù)堆棧
OS_STK START_TASK_STK[START_STK_SIZE];//任務(wù)函數(shù)void start_task(void *pdata);
//LED0任務(wù)//設(shè)置任務(wù)優(yōu)先級#define LED0_TASK_PRIO 7 //設(shè)置任務(wù)堆棧大小#define LED0_STK_SIZE 64//任務(wù)堆棧
OS_STK LED0_TASK_STK[LED0_STK_SIZE];//任務(wù)函數(shù)void led0_task(void *pdata);
//LED1任務(wù)//設(shè)置任務(wù)優(yōu)先級#define LED1_TASK_PRIO 6 //設(shè)置任務(wù)堆棧大小#define LED1_STK_SIZE 64//任務(wù)堆棧
OS_STK LED1_TASK_STK[LED1_STK_SIZE];//任務(wù)函數(shù)void led1_task(void *pdata);
/開始任務(wù)void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OS_ENTER_CRITICAL(); //進入臨界區(qū)(無法被中斷打斷)
OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //掛起起始任務(wù).
OS_EXIT_CRITICAL(); //退出臨界區(qū)(可以被中斷打斷)
}
//LED0任務(wù)void led0_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
};
}
//LED1任務(wù)void led1_task(void *pdata)
{
while(1)
{
LED1=0;
delay_ms(300);
LED1=1;
delay_ms(300);
};
}
編寫了三個任務(wù),堆棧大小都是64,優(yōu)先級分別是10、7、6
2. 初始化UCOSII,并在UCOSII中創(chuàng)建人物,啟動UCOSII調(diào)用OSInit 初始化UCOSII
調(diào)用 OSTaskCreate 函數(shù)創(chuàng)建任務(wù)
調(diào)用 OSStart,啟動 UCOSII
int main(void)
{
delay_init(); //延時函數(shù)初始化
NVIC_Configuration();
LED_Init(); //初始化與LED連接的硬件接口
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創(chuàng)建起始任務(wù)
OSStart();
}
1、
OSTaskDel(START_TASK_PRIO); //開始任務(wù),創(chuàng)建完任務(wù)后不再使用,將其刪除
START_TASK_PRIO:是時間的優(yōu)先級,由于每個事件有唯一的優(yōu)先級
OSTaskSuspend(LED1_TASK_PRIO);//將任務(wù)掛起
OSTaskResume(LED1_TASK_PRIO);//將任務(wù)恢復(fù)
1、OSIdleTaskHook(),空閑任務(wù)調(diào)用這個函數(shù),可以用來讓CPU進入低功耗模式
2、OSInitHook(),系統(tǒng)初始化函數(shù)OSInit()調(diào)用此函數(shù)。
3、OSStatTaskHook(),統(tǒng)計任務(wù)每秒中都會調(diào)用這個函數(shù),此函數(shù)允許你向統(tǒng)計任務(wù)中添加自己的應(yīng)用函數(shù)。
4、OSTaskCreateHook(),任務(wù)創(chuàng)建的鉤子函數(shù)。
5、OSTaskDelHook(),任務(wù)刪除的鉤子函數(shù)。
6、OSTaskReturnHook(),任務(wù)意外返回時調(diào)用的鉤子函數(shù),比如刪除某個任務(wù)
7、OSTaskSwHook(),任務(wù)切換時候調(diào)用的鉤子函數(shù)。
8、OSTimeTickHook(),滴答定時器調(diào)用的鉤子函數(shù)。
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲天堂网站
|
天天射天天干天天操
|
国产激情一区二区三区
|
免费爱爱网站
|
午夜国产在线观看
|
www.色综合|
91亚洲精品在线
|
黄色大片av
|
97超碰资源站
|
一级大片免费看
|
日韩欧美国产精品
|
亚洲精品18在线观看
|
国产激情视频在线观看
|
91网站免费
|
久久久免费观看
|
成人在线免费视频观看
|
日日夜夜av|
亚洲精品视频在线播放
|
天天操夜夜
|
亚洲国产成人91精品
|
日韩在线小视频
|
国产午夜一区二区三区
|
国产精品视频网站
|
亚洲一区中文
|
欧美黄视频
|
一区在线观看视频
|
日本少妇久久
|
一级黄色免费看
|
亚洲福利网
|
亚洲另类视频
|
深夜福利在线播放
|
日本精品在线视频
|
欧美激情三区
|
中文字幕综合网
|
国产理论在线观看
|
国产亚洲视频在线观看
|
超碰成人在线观看
|
97人人视频
|
久久一级片
|
日韩欧美国产精品
|
日本大尺度吃奶做爰久久久绯色
|