原创 RTX51应用笔记

2008-4-6 20:11 6386 3 12 分类: MCU/ 嵌入式
点击下载
点击下载
点击下载
    RTX51是KEILC公司专为51系列单片机而出的嵌入式系统,目前有两个版本可供选择:RTX51 tiny和RTX51 full 两个版本。由于使用的人不是很多,相关的资料也十分的少。因此本人在调试时走了一点点弯路,由于之前自学了点UC/OS II嵌入式操作系统。学习RTX51时感到十分的轻松。
   此次上传一点关于RTX51软件安装包和一点中文使用手册(想学好的话必须得看英文手册,安装好软件包后,英文手册在HLP目前下可找到)。
   本此讲解的为RTX51 TINY版,因为它适合于没有外展存储器的51芯片,其本身也就900个字节左右,非常的小巧,当然了功能方面也就相应缩水了!。但是,使用RTX51 Tiny 的程序可以访问外部存储器。RTX51 Tiny允许循环任务切换,并且支持信号传递,还能并行的利用中断功能。RTX51 Tiny 的os_wait函数可以等待以下事件:时间到、时间间隔、来自任务或者中断的信号。压缩包中的中文手册讲解的非常的详细,也此就不再赘说了。下面举两个小例子:
    事前准备:下载附件,解压。安装RTX 51软件包,(注KEIL C 版本必须是7.02版本以上)
    实例1:(最好的例子是安装后程序处带的examples,我就是认真看了交通灯那个例子后才调通了下面的LED流水灯程序的)
         

#include


#include



const unsigned
char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80


                                              
,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x00};


/*时间到空间的转换,如果table:


const unsigned
char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


则算法和代码会多出一倍来。table数组虽然增加了一倍,算法也随之减少了一半,


好处当然不止在这里体现,下面的进程2也减少了一半*/



//进程0 ->->


void LED0 (void)
_task_ 0


{


     int i;


     os_create_task(1);//创建进程1


     os_create_task(2);//创建进程2


     while(1)


     {


            for (i = 0; i < 15; i++)


            {


                      P1 =
table;


                  
os_wait(K_TMO,30,0);//
等待30*10000微妙 = 0.3


            }


            os_send_signal(1);    //发送Signal信号,激活进程1


            os_wait(K_SIG,0,0);   //等待信号


     }


}



//进程1 全亮->全灭->全亮


void LED1 (void)
_task_ 1


{


     int i;


     while(1)


     {


           
os_wait(K_SIG,0,0);


            for (i = 0; i < 3;
i++)


            {


                      P1 = table[15];   //全亮


                  
os_wait(K_TMO,30,0);


                   P1 = table[16];       //全灭


                  
os_wait(K_TMO,30,0);


            }


        
os_send_signal(2);


     }


}



//进程2 两边->中间中间->两边


void LED2 (void)
_task_ 2


{


     int i;


     while(1)


     {


           
os_wait(K_SIG,0,0);


            for (i = 0; i < 8;
i++)


            {


                   P1 =  table | table[i+7];  //由于table长度多一倍,省去了一个循环,而且算法也简化了。


                  
os_wait(K_TMO,30,0);


            }


           
os_send_signal(0);//
发送Signal信号,激活进程0


     }


}

         注:RTX 51 是从 _task_ 0开始运行程序的(程序中不能出现 main()函        数)。上述例子是使用RTX 51 的TINY版 编写的一个流水灯的程序。有详        细的注解,应该很容易看明白的。调入KEIL C中进行编译时千万不能忘了        选择相应的操作系统。如下图所示:
         点击看大图
   

      实例二:
        #include "reg51.h"
        #include "rtx51tny.h"

        sbit led0 = P1^0;//定义一个LED测试灯0
        sbit led1 = P1^1;//
定义一个LED测试灯1
        /************************************************
        //功能:任务0 创建任务1 和任务2,运行后便将自身删除。
       
************************************************/
        void main_job() _task_ 0
         {
           os_create_task(1);//创建进程1
           os_create_task(2);//创建进程2
           os_delete_task(0);//将自身删除
         }
        
/************************************************

        //功能:控制LED0闪烁

       
************************************************/
         void led0_job() _task_ 1

          {
           led0 = 1;//LED初始为不亮(对于共阳接法)
  
            for (;;)
            {
             led0 = !led0;//LED0闪烁
             os_wait(K_TMO,100,0);//延时0.3S
            }
         }
      
/************************************************

        //功能:控制LED1闪烁

       
************************************************/
        void led1_job() _task_ 2

          {
            led1 = 1;
//LED初始为不亮(对于共阳接法)
            for (;;)
            {
             led1 = !led1;
//LED1闪烁
             os_wait(K_TMO,150,0);
//延时0.3S
            }
         }
         注:可能注意到了上面所有的任务中都是一个死循环。刚接触                     的朋友可能不能理解,看一点操作系统相关知识很快就明白了。不             就是时间片轮转法吗!
               对于RTX51就讲这么多了,希望用到的朋友好好学习,真的                很实用。特别是FULL版本,自带了CAN软件包,太方便                了……共享万岁!!
       

PARTNER CONTENT

文章评论9条评论)

登录后参与讨论

用户170343 2009-5-26 09:32

有时间交流一下

用户1373073 2008-12-14 20:39

上一届的牛人!!!

用户165094 2008-10-13 20:15

我的QQ是250733345,有时间交流一下

用户165094 2008-10-13 20:13

我的QQ是250733345,有时间交流一下

用户165094 2008-10-13 20:11

我想问一下楼主,第一个例子中, os_wait(K_TMO,30,0); 它的不是延时嘛,你有没有把timesharing 为0来屏蔽任务自动切换

用户165094 2008-10-13 20:10

我想问一下楼主,第一个例子中, os_wait(K_TMO,30,0); 它的不是延时嘛,你有没有把timesharing 为0来屏蔽任务自动切换

用户148846 2008-7-16 20:30

第二个例子代码对的,可惜理解/讲解错了。

用户386511 2008-4-12 21:13

多谢了!先学学,有不懂还望指教。 解释也清楚,刚学的人就希望能看到这样的例子。

用户386511 2008-4-12 21:06

多谢了!先学学,有不懂还望指教。
相关推荐阅读
用户506569 2008-05-13 20:44
keil C 编译器错误与解决方法
keil C 编译器错误与解决方法.pdf                最近调好了基于EDN USB学习板的无线键盘程序,以前KEIL C没有怎么好好的学习.调试中遇到很多的问题.下面我自己在网上搜...
用户506569 2008-05-13 20:18
EDN USB实验板实战程序---------无线键盘
wirless_keynum_send_ok.rarwirless_USB-keyboard_ok.rar    在写这篇文章前,先要感谢COMPUTER00提供的漂亮的测试程序,让我少走了很多的弯路...
用户506569 2008-05-11 21:50
EDN USB开发板实战-------无线收发!
    前几天收到了EDN助学小组的USB开发板.  非常的漂亮. 很想做个无线键盘玩玩.所以对我的NRF2401进行了十分大胆尝试,上5V的电,没想过试.手册上说的明明白白极限电压是4.0V.呀.有...
用户506569 2008-04-05 18:09
nrf2401调试心得
         最近调通NRF2401无线传输的程序,发出来大家共享一下。        使用NRF2401芯片作无线收发时非常的方便,没有以前做401时的杂波。出来的波形非常的漂亮,在实验室调试时...
我要评论
9
3
关闭 站长推荐上一条 /1 下一条