當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]* 內(nèi)容簡(jiǎn)述: 本例程操作系統(tǒng)采用ucos2.86a版本, 建立了5個(gè)任務(wù) 任務(wù)名 優(yōu)先級(jí) APP_TASK_START_PRIO 2 主任務(wù) Task_Com1_PRIO

* 內(nèi)容簡(jiǎn)述:


本例程操作系統(tǒng)采用ucos2.86a版本, 建立了5個(gè)任務(wù)

任務(wù)名 優(yōu)先級(jí)

APP_TASK_START_PRIO 2 主任務(wù)

Task_Com1_PRIO 4 COM1通信任務(wù)

Task_Led1_PRIO 7 LED1 閃爍任務(wù)

Task_Led2_PRIO 8 LED2 閃爍任務(wù)

Task_Led3_PRIO 9 LED3 閃爍任務(wù)

當(dāng)然還包含了系統(tǒng)任務(wù):

OS_TaskIdle 空閑任務(wù)-----------------優(yōu)先級(jí)最低

OS_TaskStat 統(tǒng)計(jì)運(yùn)行時(shí)間的任務(wù)-------優(yōu)先級(jí)次低



1、主任務(wù)建立:


1 //建立主任務(wù), 優(yōu)先級(jí)最高 建立這個(gè)任務(wù)另外一個(gè)用途是為了以后使用統(tǒng)計(jì)任務(wù)

2 os_err = OSTaskCreate((void (*) (void *)) App_TaskStart, //指向任務(wù)代碼的指針

3 (void *) 0, //任務(wù)開(kāi)始執(zhí)行時(shí),傳遞給任務(wù)的參數(shù)的指針

4 (OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1], //分配給任務(wù)的堆棧的棧頂指針 從頂向下遞減

5 (INT8U) APP_TASK_START_PRIO); //分配給任務(wù)的優(yōu)先級(jí)

這個(gè)采用老版本的任務(wù)建立函數(shù),第一個(gè)參數(shù)通俗的說(shuō)法就是該任務(wù)對(duì)應(yīng)的函數(shù),如下:


1 static void App_TaskStart(void* p_arg)

2 {

3 (void) p_arg;

4 //初始化ucos時(shí)鐘節(jié)拍

5 OS_CPU_SysTickInit(); /* Initialize the SysTick. */

6

7 //使能ucos 的統(tǒng)計(jì)任務(wù)

8 #if (OS_TASK_STAT_EN > 0)

9 //----統(tǒng)計(jì)任務(wù)初始化函數(shù)

10 OSStatInit(); /* Determine CPU capacity. */

11 #endif

12 //建立其他的任務(wù)

13 App_TaskCreate();

14

15 while (1)

16 {

17 //1秒一次循環(huán)

18 OSTimeDlyHMSM(0, 0,1, 0);

19 }

20 }


當(dāng)主任務(wù)建立之后,程序就轉(zhuǎn)到該函數(shù)處,調(diào)用 App_TaskCreate();建立其他任務(wù),然后進(jìn)入死循環(huán),我們會(huì)發(fā)現(xiàn):這里的主任務(wù)在建立其他任務(wù)后就沒(méi)啥作用的,這時(shí)可以調(diào)用相應(yīng)的函數(shù)將主任務(wù)給殺死,這里沒(méi)有這樣做,只是讓主任務(wù)進(jìn)入循環(huán)。


2、其他任務(wù)建立:



1 static void App_TaskCreate(void)

2 {

3 //CPU_INT08U os_err;

4

5 //Com1_SEM=OSSemCreate(1); //建立串口1中斷的信號(hào)量

6 Com1_MBOX=OSMboxCreate((void *) 0); //建立串口1中斷的消息郵箱

7

8 //串口1接收及發(fā)送任務(wù)---------------------------------------------------------

9 OSTaskCreateExt(Task_Com1, //指向任務(wù)代碼的指針

10 (void *)0, //任務(wù)開(kāi)始執(zhí)行時(shí),傳遞給任務(wù)的參數(shù)的指針

11 (OS_STK *)&Task_Com1Stk[Task_Com1_STK_SIZE-1],//分配給任務(wù)的堆棧的棧頂指針 從頂向下遞減

12 Task_Com1_PRIO, //分配給任務(wù)的優(yōu)先級(jí)

13 Task_Com1_PRIO, //預(yù)備給以后版本的特殊標(biāo)識(shí)符,在現(xiàn)行版本同任務(wù)優(yōu)先級(jí)

14 (OS_STK *)&Task_Com1Stk[0], //指向任務(wù)堆棧棧底的指針,用于堆棧的檢驗(yàn)

15 Task_Com1_STK_SIZE, //指定堆棧的容量,用于堆棧的檢驗(yàn)

16 (void *)0, //指向用戶附加的數(shù)據(jù)域的指針,用來(lái)擴(kuò)展任務(wù)的任務(wù)控制塊

17 OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR); //選項(xiàng),指定是否允許堆棧檢驗(yàn),是否將堆棧清0,任務(wù)是否要進(jìn)行浮點(diǎn)運(yùn)算等等。

18 //LED1 閃爍任務(wù)------------------------------------------------------

19 OSTaskCreateExt(Task_Led1,(void *)0,(OS_STK *)&Task_Led1Stk[Task_Led1_STK_SIZE-1],Task_Led1_PRIO,Task_Led1_PRIO,(OS_STK *)&Task_Led1Stk[0],

20 Task_Led1_STK_SIZE,

21 (void *)0,

22 OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

23

24 //LED2 閃爍任務(wù)------------------------------------------------------

25 OSTaskCreateExt(Task_Led2,(void *)0,(OS_STK *)&Task_Led2Stk[Task_Led2_STK_SIZE-1],Task_Led2_PRIO,Task_Led2_PRIO,(OS_STK *)&Task_Led2Stk[0],

26 Task_Led2_STK_SIZE,

27 (void *)0,

28 OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

29

30 //LED3 閃爍任務(wù)------------------------------------------------------

31 OSTaskCreateExt(Task_Led3,(void *)0,(OS_STK *)&Task_Led3Stk[Task_Led3_STK_SIZE-1],Task_Led3_PRIO,Task_Led3_PRIO,(OS_STK *)&Task_Led3Stk[0],

32 Task_Led3_STK_SIZE,

33 (void *)0,

34 OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

35 }


這里是建立四個(gè)子任務(wù)第一個(gè)是串口通信的任務(wù),一會(huì)再說(shuō),下面三個(gè)是LED閃爍任務(wù),這里舉Task_Led1說(shuō)明:


1 //LED1閃爍任務(wù)----------------------------------------

2 static void Task_Led1(void* p_arg)

3 {

4 (void) p_arg;

5 while (1)

6 {

7 LED_LED1_ON();

8 OSTimeDlyHMSM(0, 0, 0, milsec1);

9

10 LED_LED1_OFF();

11 OSTimeDlyHMSM(0, 0, 0, milsec1);

12 }

13 }


可見(jiàn)LED閃爍任務(wù)其實(shí)就是一個(gè)無(wú)限循環(huán),讓燈的電平每隔一定時(shí)間高、每隔一定時(shí)間低來(lái)呈現(xiàn)閃爍的效果。那么,他是怎樣實(shí)現(xiàn)任務(wù)切換的呢?這就是操作系統(tǒng)的功能了,操作系統(tǒng)根據(jù)每個(gè)任務(wù)的優(yōu)先級(jí),在每個(gè)子任務(wù)執(zhí)行到一定時(shí)期查詢(xún)當(dāng)前掛起任務(wù)的優(yōu)先級(jí)來(lái)選擇優(yōu)先級(jí)最高的進(jìn)行

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉