• RTX51实时系统(2)


    &

    /***************************************************
     *作     者:温子祺
     *联系方式:wenziqi@hotmail.com
     *说    明 :RTX-51实时系统(2)   
     ***************************************************/

     

    【例子】调用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<<i;
    47 os_wait (K_TMO,10,0);//延时100ms
    48   }
    49
    50 os_send_signal(LEDCTRLTASK2);//向LEDCtrlTask2任务发送信号
    51  
    52 }
    53
    54 }
    55  /******************************************
    56 *函数名称:LEDCtrlTask2
    57 *输 入:无
    58 *输 出:无
    59 *功 能:流水灯任务2
    60 *******************************************/
    61  void LEDCtrlTask2(void) _task_ LEDCTRLTASK2
    62 {
    63 unsigned char i=0;
    64
    65 while(1)
    66 {
    67
    68 os_wait(K_SIG,LEDCTRLTASK2,0);//等待LEDCtrlTask2任务信号
    69  
    70 for(i=0;i<=7;i++)
    71 {
    72 LED_PORT&=~(1<<i);
    73 os_wait (K_TMO,10,0); //延时100ms
    74   }
    75
    76 os_send_signal(LEDCTRLTASK3);//向LEDCtrlTask3任务发送信号
    77   }
    78 }
    79  /******************************************
    80 *函数名称:LEDCtrlTask3
    81 *输 入:无
    82 *输 出:无
    83 *功 能:流水灯任务3
    84 *******************************************/
    85  void LEDCtrlTask3(void) _task_ LEDCTRLTASK3
    86 gt;{
    87 unsigned char i=0;
    88
    89 while(1)
    90 {
    91 os_wait(K_SIG,LEDCTRLTASK3,0);//等待LEDCtrlTask3任务信号
    92  
    93 for(i=0;i<=7;i++)
    94 {
    95 LED_PORT|=1<<(7-i);
    96 os_wait (K_TMO,10,0); //延时100ms
    97   }
    98
    99 os_send_signal(LEDCTRLTASK4);//向LEDCtrlTask4任务发送信号
    100  
    101 }
    102
    103
    104 }
    105  /******************************************
    106 *函数名称:LEDCtrlTask4
    107 *输 入:无
    108 *输 出:无
    109 *功 能:流水灯任务4
    110 *******************************************/
    111  void LEDCtrlTask4(void) _task_ LEDCTRLTASK4
    112 {
    113 unsigned char i=0;
    114
    115 while(1)
    116 {
    117
    118 os_wait(K_SIG,LEDCTRLTASK4,0);//等待LEDCtrlTask4任务信号
    119   for(i=0;i<=7;i++)
    120 {
    121 LED_PORT&=~(1<<(7-i));
    122 os_wait (K_TMO,10,0); //延时100ms
    123   }
    124
    125 os_send_signal(LEDCTRLTASK1);//向LEDCtrlTask1任务发送信号
    126  
    127 }
    128
    129 }
    130  

     

    代码分析

    RTX-LED实验代码中存在5个任务:分别是TaskInitLEDCtrlTask1LEDCtrlTask2

    LEDCtrlTask3LEDCtrlTask4

    TaskInit任务负责任务的创建,创建LEDCtrlTask1LEDCtrlTask2LEDCtrlTask3

    LEDCtrlTask44个控制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任务消息。

    LEDCtrlTask2LEDCtrlTask3LEDCtrlTask4任务内部函数操作都与LEDCtrlTask1雷同,没有多大的区别。

  • 相关阅读:
    js原型杂谈
    arguments.callee.caller
    $resource
    sql的四种匹配模式
    AMD规范
    module.ngdoc
    angularjs杂谈
    浏览器前缀
    css21规范学习
    <meta>标签
  • 原文地址:https://www.cnblogs.com/wenziqi/p/1769341.html
Copyright © 2020-2023  润新知