RTX-51實(shí)時系統(tǒng)(2)
【例子】調(diào)用Keil自帶的RTX-51 Tiny實(shí)時系統(tǒng)來控制LED燈,不斷重復(fù)4種不同的流水燈每100ms對LED進(jìn)行操作。
RTX-51實(shí)時系統(tǒng)代碼如下:
1#include"stc.h"2#include"rtx51tny.h"34#defineTASKINIT0//任務(wù)ID5#defineLEDCTRLTASK116#defineLEDCTRLTASK227#defineLEDCTRLTASK338#defineLEDCTRLTASK44910#defineLED_PORTP21112/******************************************13*函數(shù)名稱:Taskinit14*輸入:無15*輸出:無16*功能:初始化任務(wù)17*******************************************/18voidTaskinit(void)_task_TASKINIT19{2021os_create_task(TASKINIT);//創(chuàng)建Taskinit任務(wù)22os_create_task(LEDCTRLTASK1);//創(chuàng)建LEDCtrlTask1任務(wù)23os_create_task(LEDCTRLTASK2);//創(chuàng)建LEDCtrlTask2任務(wù)24os_create_task(LEDCTRLTASK3);//創(chuàng)建LEDCtrlTask3任務(wù)25os_create_task(LEDCTRLTASK4);//創(chuàng)建LEDCtrlTask4任務(wù)26os_send_signal(LEDCTRLTASK1);//向LEDCtrlTask1任務(wù)發(fā)送信號27os_delete_task(TASKINIT);//刪除Taskinit任務(wù)2829}30/******************************************31*函數(shù)名稱:LEDCtrlTask132*輸入:無33*輸出:無34*功能:流水燈任務(wù)135*******************************************/36voidLEDCtrlTask1(void)_task_LEDCTRLTASK137{38unsignedchari=0;3940while(1)41{42os_wait(K_SIG,LEDCTRLTASK1,0);//等待LEDCtrlTask1任務(wù)信號4344for(i=0;i<=7;i++)45{46LED_PORT|=1<代碼分析
在RTX-LED實(shí)驗(yàn)代碼中存在5個任務(wù):分別是TaskInit、LEDCtrlTask1、LEDCtrlTask2、
LEDCtrlTask3、LEDCtrlTask4。
TaskInit任務(wù)負(fù)責(zé)任務(wù)的創(chuàng)建,創(chuàng)建LEDCtrlTask1、LEDCtrlTask2、LEDCtrlTask3、
LEDCtrlTask4這4個控制LED燈任務(wù)。當(dāng)創(chuàng)建這4個任務(wù)成功后,在TaskInit任務(wù)中刪除TaskInit任務(wù)。
LEDCtrlTask1任務(wù)中的while(1)死循環(huán)第一步等待LEDCtrlTask1任務(wù)消息,調(diào)用os_wait(K_SIG,LEDCTRLTASK1,0)來執(zhí)行。當(dāng)接收到LEDCtrlTask1任務(wù)消息時,則通過for循環(huán)進(jìn)行LED燈操作,并通過調(diào)用os_wait (K_TMO,10,0)進(jìn)行100ms延時。最后執(zhí)行發(fā)送LEDCtrlTask2任務(wù)消息。
LEDCtrlTask2、LEDCtrlTask3、LEDCtrlTask4任務(wù)內(nèi)部函數(shù)操作都與LEDCtrlTask1雷同,沒有多大的區(qū)別。