RTX51应用笔记

来源:本站
导读:目前正在解读《RTX51应用笔记》的相关信息,《RTX51应用笔记》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《RTX51应用笔记》的详细说明。

RTX51KEILC公司专为51系列单片机而出的嵌入式系统,目前有两个版本可供选择:RTX51tinyRTX51full两个版本。由于使用的人不是很多,相关的资料也十分的少。因此本人在调试时走了一点点弯路,由于之前自学了点UC/OSII嵌入式操作系统。学习RTX51时感到十分的轻松。

此次上传一点关于RTX51软件安装包和一点中文使用手册(想学好的话必须得看英文手册,安装好软件包后,英文手册在HLP目前下可找到)。

本此讲解的为RTX51TINY版,因为它适合于没有外展存储器的51芯片,其本身也就900个字节左右,非常的小巧,当然了功能方面也就相应缩水了!。但是,使用RTX51Tiny的程序可以访问外部存储器。RTX51Tiny允许循环任务切换,并且支持信号传递,还能并行的利用中断功能。RTX51Tinyos_wait函数可以等待以下事件:时间到、时间间隔、来自任务或者中断的信号。压缩包中的中文手册讲解的非常的详细,也此就不再赘说了。下面举两个小例子:

事前准备:下载附件,解压。安装RTX51软件包,(注KEILC版本必须是7.02版本以上)

实例1:(最好的例子是安装后程序处带的examples,我就是认真看了交通灯那个例子后才调通了下面的LED流水灯程序的)

#include

#include

constunsigned

chartable[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80

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

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

constunsigned

chartable[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

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

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

//进程0左->右->左

voidLED0(void)

_task_0

{

inti;

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

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

while(1)

{

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

{

P1=

table[i];

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

}

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

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

}

}

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

voidLED1(void)

_task_1

{

inti;

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两边->中间中间->两边

voidLED2(void)

_task_2

{

inti;

while(1)

{

os_wait(K_SIG,0,0);

for(i=0;i<8;

i++)

{

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

os_wait(K_TMO,30,0);

}

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

}

}

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

实例二:

#include"reg51.h"

#include"rtx51tny.h"

sbitled0=P1^0;//定义一个LED测试灯0

sbitled1=P1^1;//定义一个LED测试灯1

/************************************************

//功能:任务0创建任务1和任务2,运行后便将自身删除。

************************************************/

voidmain_job()_task_0

{

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

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

os_delete_task(0);//将自身删除

}

/************************************************

//功能:控制LED0闪烁

************************************************/

voidled0_job()_task_1

{

led0=1;//LED初始为不亮(对于共阳接法)

for(;;)

{

led0=!led0;//LED0闪烁

os_wait(K_TMO,100,0);//延时0.3S

}

}

/************************************************

//功能:控制LED1闪烁

************************************************/

voidled1_job()_task_2

{

led1=1;//LED初始为不亮(对于共阳接法)

for(;;)

{

led1=!led1;//LED1闪烁

os_wait(K_TMO,150,0);//延时0.3S

}

}

注:可能注意到了上面所有的任务中都是一个死循环。刚接触的朋友可能不能理解,看一点操作系统相关知识很快就明白了。不就是时间片轮转法吗!

对于RTX51就讲这么多了,希望用到的朋友好好学习,真的很实用。特别是FULL版本,自带了CAN软件包,太方便了……共享万岁!!

提醒:《RTX51应用笔记》最后刷新时间 2024-03-14 01:12:30,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《RTX51应用笔记》该内容的真实性请自行鉴别。