【例子】调用Keil自带的RTX-51 Tiny实时系统来控制LED灯,不断重复4种不同的流水灯每100ms对LED进行操作。
RTX-51实时系统代码如下:
1 #include "stc.h" 2 #include "rtx51tny.h" 3 4 #define TASKINIT 0 //任务ID 5 #define LEDCTRLTASK1 1 6 #define LEDCTRLTASK2 2 7 #define LEDCTRLTASK3 3 8 #define LEDCTRLTASK4 4 9 10 #define LED_PORT P2 11 12 /****************************************** 13 *函数名称:Taskinit 14 *输 入:无 15 *输 出:无 16 *功 能:初始化任务 17 *******************************************/ 18 void Taskinit(void) _task_ TASKINIT 19 { 20 21 os_create_task(TASKINIT); //创建Taskinit任务 22 os_create_task(LEDCTRLTASK1);//创建LEDCtrlTask1任务 23 os_create_task(LEDCTRLTASK2);//创建LEDCtrlTask2任务 24 os_create_task(LEDCTRLTASK3);//创建LEDCtrlTask3任务 25 os_create_task(LEDCTRLTASK4);//创建LEDCtrlTask4任务 26 os_send_signal(LEDCTRLTASK1);//向LEDCtrlTask1任务发送信号 27 os_delete_task(TASKINIT); //删除Taskinit任务 28 29 } 30 /****************************************** 31 *函数名称:LEDCtrlTask1 32 *输 入:无 33 *输 出:无 34 *功 能:流水灯任务1 35 *******************************************/ 36 void LEDCtrlTask1(void) _task_ LEDCTRLTASK1 37 { 38 unsigned char i=0; 39 40 while(1) 41 { 42 os_wait(K_SIG,LEDCTRLTASK1,0);//等待LEDCtrlTask1任务信号 43 44 for(i=0;i<=7;i++) 45 { 46 LED_PORT|=1<
代码分析
在RTX-LED实验代码中存在5个任务:分别是TaskInit、LEDCtrlTask1、LEDCtrlTask2、
LEDCtrlTask3、LEDCtrlTask4。
TaskInit任务负责任务的创建,创建LEDCtrlTask1、LEDCtrlTask2、LEDCtrlTask3、
LEDCtrlTask4这4个控制LED灯任务。当创建这4个任务成功后,在TaskInit任务中删除TaskInit任务。
LEDCtrlTask1任务中的while(1)死循环第一步等待LEDCtrlTask1任务消息,调用os_wait(K_SIG,LEDCTRLTASK1,0)来执行。当接收到LEDCtrlTask1任务消息时,则通过for循环进行LED灯操作,并通过调用os_wait (K_TMO,10,0)进行100ms延时。最后执行发送LEDCtrlTask2任务消息。
LEDCtrlTask2、LEDCtrlTask3、LEDCtrlTask4任务内部函数操作都与LEDCtrlTask1雷同,没有多大的区别。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』