×
嵌入式 > 技术百科 > 详情

RTX-51实时系统(2)

发布时间:2020-06-03 发布时间:
|

【例子】调用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雷同,没有多大的区别。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
德州仪器推出稳压误差仅为1%的无电容LDO产品