STC单片机运行RTX51-tiny操作系统

RTX51-TINY操作系统在51单片机的一个小型操作系统,在实际应用中,极大的降低了编程难度,尤其是较为复杂的一些菜单操作,比状态机编程要简单很多,本文主要将该操作系统在STC8G1K17单片机上进行移植。

1、将操作系统的库文件和配置文件拷贝到新建的KEIL工程目录下,两个文件在KEIL的安装目录下,如下图所示:

2、新建KEIL工程。新建一个新的KEIL工程,芯片选择STC8G1K系列,然后 将操作系统的两个文件和自己新建的main.c文件添加到新建的工程。如下图所示:

3、工程设置。在如下图所示的设置界面,选择RTX-51 Tiny。

4、编写main.c文件。在自己新建的main.c文件中,加入以下代码

#include "stc8g.h"  
#include "RTX51TNY.h"
/******************RTX-51tiny产品参数****************
最大可定义任务数量   -----16
最大可激活的任务数   -----16
需要定时器0    和    寄存器组1
***************************************************/

void task_create(void) _task_ 0  //类似main函数
{            
    os_create_task(1);  //
    os_create_task(2);  //
  os_create_task(3);    //
    
    
    os_delete_task(0);  //挂起本任务0,不再运行本任务
    while(1);
    
}


//-----------------------------------------------
void TaskA(void)  _task_ 1    //任务1
{    
    while(1)
        {
        os_wait2(K_IVL,2);  //延时
        }            
}
//------------------------------------------------
void TaskB(void)  _task_ 2    //任务2
{
    while(1)
        {

        os_wait2(K_IVL,2);  //延时
        }            
}
//------------------------------------------------
void TaskC(void)  _task_ 3    //任务3
{
    while(1)
        {
        os_wait2(K_IVL,2);  //延时
        }                
}

运用RTX51-tiny编程是不需要main函数的,系统初始化完成后,直接进入任务0运行,在任务0中新建了3个任务,然后删除任务0.然后系统就会以定义的时间片,在任务1、2、3中顺序运行。每一个任务内部均是一个while(1)死循环。相比较于裸机开发的只有一个while(1),RTX-51tiny操作系统可以有多个while(1)循环(最多16个),并且while(1)循环之间可以发送消息。编译后通过后,如下所示:

 可以看到代码量只有814个字节,占用空间非常少。注意RTX51-tiny操作系统需要占用定时器0和寄存器组1作为系统时间,应用编程不能再用。

5、conf_tny.a51配置文件说明。该文件主要是配置操作系统的任务调度周期,主要需要配置操作系统的滴答时间(系统ticks)和任务调度时间。如下图所示设置的ticks时间为10000个机器周期,任务调度时间(即每个任务运行时间)为5个ticks时间。这里涉及一个重要的问题,传统51单片机的机器周期是晶振周期的12分频,STC单片机的机器周期是没有经过分频的,如果STC的运行时钟配置为12MHz(运行时钟在STC-ISP下载软件中配置),那么在配置INT_CLOCK参数时,机器周期到底是12MHz还是经过分频后的1MHz? 

 经过实际测试发现:虽然STC单片机的机器周期没有经过分频,但是在配置操作系统的ticks时,还是要按照分频后的机器周期来设置。比如STC时钟周期配置为12MHz,那么在配置操作系统ticks时的机器周期应该按照12MHz/12=1MHz来计算。按照上图的配置来看,那么ticks=10000/(12MHz/12)=10ms。我们实际测试情况如下,在任务1中给单片机的P10口输出一个方波,方波高电平的持续时间为10个ticks,实际测试的IO口输出的波形如下所示:

 

可以看到高电平的持续时间约为100ms(10个ticks时间),因此,可以看到配置操作系统的ticks确实是经过12分频的。这里又有一个问题,既然计算操作系统的ticks时,需要将机器周期12分频,那么单片机实际上在运行代码时,有没有进行12分频?

我们编写同样类似的代码,将延时函数更改为 _nop_()函数,让P10端口输出方波。

STC单片机的时钟同样设置为12M,如下所示:

测试结果如下:可以看到实际延时时间约为470ns(5个nop时间),那么一个nop时间约为90ns,基本上可以看到系统运行时钟在12MHz。

因此,可以得到结论:在配置操作系统的ticks时,机器周期=STC运行时钟/12。但是单片机运行时钟是没有经过分频的。

代码连接:STC8G1k17运行RTX51-TINY操作系统demo代码-其它文档类资源-CSDN下载

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值