原创 测试51单片机的RTX51实时系统的两个C程序

2010-1-19 21:13 5074 10 11 分类: MCU/ 嵌入式

 


点击看大图最近对实时嵌入式系统很感兴趣,找了些关于KEIL的RTX51资料。觉得写的挺好的,自己也小试了试一些例程。


如《RTX-51 实时操作系统 》一文中所描述的:RTX51是一个适用于8051 家族的实时多任务操作系统。RTX51使复杂的系统和软件设计以及有时间限制的工程开发变得简单。RTX51是一个强大的工具,它可以在单个CPU上管理几个作业(任务)。RTX51有两种不同的版本:RTX51 Full和RTX51 Tiny。二者的主要区别是前者是可以强占(或者说可剥夺的)系统而后者是不可以强占的(不可剥夺的)。


测试单任务程序:


#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
#include <reg51.h>
int counter;
void main (void){
    counter = 0;
 while(1){  /*repert forever 永远重复 */
 counter++; /*increment counter 计数加1*/
 }
}


仿真结果如下图所示:


8dfd2778-ce65-43f9-ab06-8e6c555435e7.JPG


运行前 counter="0"


d7e54c27-b6af-4b48-9afc-afb08884f201.JPG


运行过程中counter不断增加


测试循环任务切换程序:


/******************************************************************************/
/*                                                                            */
/*                   RTX_EX1.C:  The first RTX-51 Program                     */
/*                                                                            */
/******************************************************************************/


 


#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
#include <reg51.h>
long counter0;                        /* counter for task 0                   */
long counter1;                        /* counter for task 1                   */


 


/******************************************************************************/
/*       Task 0 'job0':  RTX-51 tiny starts execution with task 0             */
/******************************************************************************/
job0 () _task_ 0  {                 
  os_create_task (1);                 /* start task 1 ,开始任务1                        */
  while (1)  {  P1=0xff;                    /* endless loop ,无限循环          */
    /*源程序为 P1=0x00,但由于初始化该任务时间特别短,为了便于观察后面的任务改为P1=0xff*/
 counter0++;
                                   /* increment counter0     counter1加 0       */
    }
}


 


/******************************************************************************/
/*    Task 1 'job1':  RTX-51 tiny starts this task with os_create_task (1)    */
/******************************************************************************/
job1 () _task_ 1  {
  while (1)  { P1=0x00;                   /* endless loop ,无限循环,P1口可以接LED,灯灭则表示在进程1中    */
      /*源程序为 P1=0xff,但由于初始化后一直都在该任务中,为了便于观察改为P1=0x00*/
 counter1++;         /* increment counter 1 ,counter1加 1   */
     
    os_delete_task (0);       /*删除任务0*/
                                       
  }
}



仿真结果如下图所示:


点击看大图


运行前:P1=0xff;counter0=0;counter1=0;菜单命令外设—RTX Tiny
任务列表显示任务状态:任务0和1均为删除状态(未建立)


点击看大图


刚开始运行一小段时间:P1=0xff;counter0=0;counter1=0;任务0为运行,任务1为就绪状态


点击看大图


运行至任务1中的起始处的断点时:P1=0xff;counter0=0x9b3;counter1=0;任务0为c超时(Timeout),任务1为运行状态


点击看大图


继续运行:P1=0xff;counter0=0x9b3;counter1=0x0c;任务0为删除状态,任务1为运行状态,之后将一直在运行任务1


通过以上两个测试可以深刻地观察和理解RTX51实时系统的任务状态的转换。当然通过调试器的反汇编界面也可以清楚地看到,实时系统是如何进行任务间的切换的,尤其是相关寄存器、现场和状态的保护的。


 


 


 


 

文章评论1条评论)

登录后参与讨论

用户1144655 2010-7-24 21:07

能保证质量么?我想买个jlink,taobao上卖也这个价

tengjingshu_112148725 2010-1-20 00:29

收藏
相关推荐阅读
用户571671 2011-12-14 21:33
关于“自制简单方便的51/avr单片机USB ISP下载线”的一些说明
   之前自己写的“自制简单方便的51/avr单片机USB ISP 下载线(硬件/软件部分)”得到了很多朋友的关注,大家也提出了一些问题。在这里我系统地说明一下:         1.用沁恒公...
用户571671 2010-06-14 20:28
完全解决Protel 99SE汉化版的菜单和功能丢失问题
Protel 99SE是一款极其优秀的PCB设计软件,小巧而又功能丰富,对于电脑的硬件的要求很低,那些凡能跑WINDOW98的电脑也可以运行。可惜有两个典型的不足:1.没有官方的汉化版,这对于懂英语的...
用户571671 2010-06-04 17:07
让Ubuntu10.04中的YAMAHA声卡发声
自己的电脑上已经装了Ubuntu10.04好久了,最近才发现它居然还是个“哑巴“,一直没有声音,不管是启动还是用各种播放器播放MP3歌曲均不能听到声音。都说Ubuntu对于设备的驱动已经做的很好了的,...
用户571671 2010-03-27 12:04
INTERL BUS和MOTOROLA BUS及其区别
在实际应用中用到的很多带并行总线的芯片的硬件连接、读写操作都分为INTERL BUS和MOTOROLA BUS(某些文献上又叫INTERL 模式和MOTOROLA 模式)这可以在相应的芯片手册上看到,...
用户571671 2010-02-27 13:57
LCD BackLight Control for utulinux 2440 LCD 背光控制
LCD BackLight Control for utulinux 2440 LCD 背光控制                     注解:borlittle仅供学习参考,源代码版权归原著者所有 ...
用户571671 2010-02-27 13:55
LED Example for utulinux 2440 LED测试示例
LED Example for utulinux 2440 LED测试示例注解:borlittle仅供学习参考,源代码版权归原著者所有<?xml:namespace prefix = o ns ...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条