微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机操作系统RTX51原理分析与移植

单片机操作系统RTX51原理分析与移植

时间:01-07 来源:互联网 点击:

等于是程序和操作系统编译在一起了。该配置文件能在安装目的rtxtiny2底下找到。文件名称为Conf_tny.A51,例如,在我的电脑中,路径为:D:\Keil\单片机c语言\RtxTiny2\SourceCode\ Conf_tny.A51。如下图所示:

由于试验箱里面的芯片是AT89C51,所以要配置Conf_tny.A51的RAMTOP EQU 07F,目的是说配置内部RAM为128字节。

四.源程序代码:

源程序代码如下,说明请看代码里面的注释。

/*

** RTX-51的移植

** 移植到AT89S52

** 此程序是循环花样显示LED灯

** 有三个显示样式,分别对应下面的三个进程

** 下面的算法中用到了“时间到空间”的转换,使得算法简化不少

** 此程序我已在最小系统板上试验通过。

*/

#include reg51.h>

#include rtx51tny.h>

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[i];

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[i] | table[i+7]; //由于table长度多一倍,省去了一个循环,而且算法也简化了。

os_wait(K_TMO,30,0);

}

os_send_signal(0);

}

}

五.总结:

本试验用的RTX 的Tiny 版本。许多比较高级的功能没有去实现。目的主要是理解RTX的原理,然后移植它到某个单片机上面,编写个小程序来测试一下。通过阅读RTX附带的英文文档,我对此操作系统有了深刻的认识,感到此操作系统有很多优点,也有很多不足的地方。比如支持的任务较少,不过由于是单片机,“承受”能力也有限,也能理解。总的来说,对于单片机来说是个不错的操作系统。

六.参考文档:

[1]《RTX-51 官方英文文档》(包括FULL版,和Tiny版)

[2]《Keil Software –Cx51 编译器用户手册》中文版

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top