日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

* 內(nèi)容簡述:


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

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

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)先級最低

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



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


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

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

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

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

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

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


1 static void App_TaskStart(void* p_arg)

2 {

3 (void) p_arg;

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

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

6

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

8 #if (OS_TASK_STAT_EN > 0)

9 //----統(tǒng)計任務(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),我們會發(fā)現(xiàn):這里的主任務(wù)在建立其他任務(wù)后就沒啥作用的,這時可以調(diào)用相應(yīng)的函數(shù)將主任務(wù)給殺死,這里沒有這樣做,只是讓主任務(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中斷的信號量

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

7

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

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

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

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

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

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

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

15 Task_Com1_STK_SIZE, //指定堆棧的容量,用于堆棧的檢驗

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

17 OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR); //選項,指定是否允許堆棧檢驗,是否將堆棧清0,任務(wù)是否要進(jì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 }


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


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 }


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

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

在現(xiàn)代電子系統(tǒng)中,串口通信(UART/USART)是一種廣泛應(yīng)用的通信方式,尤其在微控制器(MCU)領(lǐng)域。STM32系列MCU以其高性能、低功耗和豐富的外設(shè)資源,成為許多嵌入式系統(tǒng)開發(fā)的首選。在某些情況下,硬件串口資源可...

關(guān)鍵字: STM32 串口通信

在現(xiàn)代嵌入式系統(tǒng)開發(fā)中,STM32微控制器(MCU)憑借其強大的功能和靈活的配置,成為了眾多開發(fā)者的首選。其中,串口通信作為MCU與外界進(jìn)行數(shù)據(jù)交換的重要手段,其重要性不言而喻。本文將詳細(xì)介紹STM32的串口通信,包括其...

關(guān)鍵字: STM32 串口通信

在現(xiàn)代工業(yè)自動化控制系統(tǒng)中,可編程邏輯控制器(PLC)作為核心設(shè)備,廣泛應(yīng)用于各種工業(yè)控制場景中。然而,在某些特定情況下,我們可能需要在沒有PLC的條件下,通過計算機直接控制變頻器。此時,串口調(diào)試工具便成為了一種實用的解...

關(guān)鍵字: PLC 變頻器 串口通信

UART(通用異步收發(fā)器)串口通信是FPGA設(shè)計中常見的通信方式之一。本文將介紹FPGA入門基礎(chǔ)中的UART串口通信設(shè)計,并附上相應(yīng)的代碼示例。

關(guān)鍵字: UART 串口通信 verilog

上位機串口通信是指在上位機(通常是計算機或微控制器)與外部設(shè)備之間通過串行通信協(xié)議進(jìn)行數(shù)據(jù)傳輸和通信的過程。在串口通信中,數(shù)據(jù)以位為單位按順序傳送,通常使用一個或兩個物理線路(通常是兩條線)來實現(xiàn)數(shù)據(jù)的發(fā)送和接收。

關(guān)鍵字: 上位機 串口通信

串口通信(Serial Communication)是一種常用的數(shù)據(jù)傳輸方式,它通過串行數(shù)據(jù)線逐位傳輸數(shù)據(jù),具有成本低、簡單易用、可靠性高等優(yōu)點。在工業(yè)控制、通信設(shè)備、嵌入式系統(tǒng)等領(lǐng)域得到廣泛應(yīng)用。

關(guān)鍵字: 串口通信 嵌入式系統(tǒng)

串口通信是一種常見的通信方式,用于在不同設(shè)備之間傳輸數(shù)據(jù)。它通過串行數(shù)據(jù)線(通常是一對TXD和RXD線)在設(shè)備之間進(jìn)行通信。串口通信具有簡單、可靠、成本低等優(yōu)點,因此在工業(yè)控制、嵌入式系統(tǒng)、數(shù)據(jù)采集等領(lǐng)域得到廣泛應(yīng)用。

關(guān)鍵字: 串口通信 串口編程

串口通信是一種常見的通信方式,主要應(yīng)用于計算機和其他設(shè)備之間的數(shù)據(jù)傳輸。它的主要原理是利用串行數(shù)據(jù)傳輸?shù)姆绞?,將?shù)據(jù)一位一位地按順序傳輸,而不是同時傳輸所有的數(shù)據(jù)。下面我們來看看串口通信的主要原理以及如何提高其傳輸速度。

關(guān)鍵字: 串口通信 串口速度

串口通信是一種常見的通信方式,它通過串行方式傳輸數(shù)據(jù)。串口通信的原理相對簡單,主要涉及到數(shù)據(jù)位的傳輸和接收。在串口通信中,數(shù)據(jù)按照一定的波特率(baud rate)逐位傳輸。通常,一個字節(jié)的數(shù)據(jù)由8位組成,所以傳輸一個字...

關(guān)鍵字: 串口通信 波特率

RS 232串口通信是一種常見的串行通信協(xié)議,廣泛應(yīng)用于計算機和其他設(shè)備之間的數(shù)據(jù)傳輸。它是由美國電子工業(yè)協(xié)會(EIA)制定的一種標(biāo)準(zhǔn),規(guī)定了數(shù)據(jù)傳輸?shù)奈锢韺雍筒糠謹(jǐn)?shù)據(jù)鏈路層的規(guī)范。

關(guān)鍵字: RS 232 串口通信
關(guān)閉