51单片机操作系统——RTX51 Tiny

RTX51是keil公司的一款实时操作系统,分为Tiny和Full两个版本。Tiny版是Full版的精简版,仅支持时间片轮转任务切换,而Full版支持时间片轮转和抢占式任务切换,还包含邮箱系统和内存池。使用RTX51需要keilC51集成开发环境和PK51许可证,并且RTX51_Tiny会占用特定硬件资源。文章提供了STC15W系列单片机使用RTX51_Tiny的配置步骤和示例代码。
摘要由CSDN通过智能技术生成

简介

RTX51 是keil公司开发的一款实时操作系统,其有两个版本:

1.Tiny 2.Full,区别如下:

  1. RTX51 Full :使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作与中断功能相似的状态下 ,信号和信息可以通过邮箱系统在任务之间互相传递 ,你可以从一存储池中分配和释放内存 你可以强迫一个任务等待中断 超时或者是从另一个任务或中断发出的信号或信息。
  2. RTX51 Tiny:仅支持时间片轮转任务切换和使用信号进行任务切换 ,不支持抢先式的任务切换不包括消息历程, 没有存储器池分配程序。

总结来说,Tiny就是RTX51 Full的精简版,只有基本的任务切换功能。

使用方法

使用RTX51操作系统需要有以下要求:

1.keil C51 集成开发环境,其许可证版本必须为PK51,否则无法编译通过。

2. RTX51_Tiny需要占用 定时器0 、定时器0中断以及寄存器组0。用户程序不可再使用这些资源。

下面介绍STC15W系列单片机如何使用RTX51_Tiny操作系统:

1.首先将RTX51_Tiny的头文件和Lib库文件添加到工程,这两个文件在keil C51的安装目录下

把这两个文件拷贝到工程目录下,并在Keil中把这两个文件添加到工程。

2.keil配置选项里选择RTX51_Tiny操作系统

 

3.RTX51_Tiny 相关配置 

由于RTX51_Tiny是基于时间片的操作系统,而且它没有优先级的概念,每个任务执行的时间是一定的,即当前任务的时间片达到时,会立即切换到其他就绪的任务,任务的时间片可以通过Conf_tny.A51文件的相关参数修改。

 INT_CLOCK 是 RTX系统的1个滴答时钟的时间,此处定义为33177是指 1个系统滴答时钟=33177个单片机的机器周期,由于我的单片机时钟的33.1776Mhz,所以其一个机器周期为1/33.1776 ≈ 0.0301us,33177个机器周器就是 999.9us≈1ms。注意:此值最大为65536
TIMESHARING 是 一个时间片等于多少个RTX系统的滴答时钟,此处定义为10,即定义时间片为10ms。
 

实验例程:

#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
#include "reg51.h"

sbit LED=P2^7;
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
sbit SET=P3^1;	 
sbit ADD=P3^0;	  
sbit SUB=P3^2; 

bit  key_mark,direction,sec;
char state,hour,minute,second,pos;
unsigned char buf[8]={0},zxm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void CS(unsigned char n)
{
   c=n/4;
   b=n%4/2;
   a=n%2;   
}

void Send(unsigned char n)
{
   P0=n;
}

void key()
{
   if(!SET)
   {
      if(++state>3)
	      state=0;
   }
   else if(!ADD)
   {
			 if(state==1)
			 { 		   
					if(++hour>23)
						hour=0;
			 }
			else if(state==2)
			{	     
				 if(++minute>59)
					minute=0;
			}    
			else if(state==3)
			{		    
				 if(++second>59)
				 second=0;
			}
   }
   else if(!SUB)
   { 
   	  if(state==1)
	    { 		   
				if(--hour<0)
					 hour=23;
	    }
			else if(state==2)
			{	     
				 if(--minute<0)
					  minute=59;
			}    
			else if(state==3)
			{		    
				 if(--second<0)
				    second=59;
			}
   } 
}

job0 () _task_ 0  
{                  
  os_create_task (1);                 /* start task 1                         */
  os_create_task (2);                 /* start task 2                         */
  os_create_task (3);
	
	while(1)
	{
		 if(++pos>5)
				pos=0;
		 
		 Send(0);
		 CS(pos);

		 if(pos==2||pos==4)
				Send(zxm[buf[pos]] | 0x80); 
		 else
				Send(zxm[buf[pos]]);  
		 
     os_wait(K_TMO,1,0);	 
	}
}

job1 () _task_ 1  
{	
	hour=12;
	state=0;
	
  while (1)  
	{             
    if(sec)
	  {
			sec=0;
			if(state==0)
			{
				if(++second>59)
				{
					 second=0;
					 if(+++minute>59)
					 {
							minute=0;
						if(++hour>23)
							 hour=0;
					 }			
				}
			}	
			buf[0]=second%10;
			buf[1]=second/10;
			buf[2]=minute%10;
			buf[3]=minute/10;
			buf[4]=hour%10;
			buf[5]=hour/10;				
   }		
 }
}

job2 () _task_ 2  
{
  while (1)
	{		
    if((!SET || !ADD || !SUB) && !key_mark)
	  {
	    os_wait(K_TMO,10,0);
			if(!SET || !ADD || !SUB) 
			{
				 key_mark=1;
				 key();		  
			}
		}
		else if(SET && ADD && SUB)
			 key_mark=0;		
  }
}

job3() _task_ 3
{
	int n=0;
	while(1)
	{
		if(++n==300)
		{
			n=0;
			sec=1;
			LED=~LED;
		}
		os_wait(K_TMO,1,0);
	}
}

  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Keil RTX51 Tiny是一款针对51系列微控制器的小型多任务操作系统。它提供了任务调度、通信、时间管理和资源管理等功能,使得开发者能够更方便地开发复杂的嵌入式系统。 Keil RTX51 Tiny的源代码由一系列C语言文件组成,包括核心文件和其他辅助文件。核心文件包括任务控制块(TCB)、中断服务例程和调度器等。TCB用于存储和管理每个任务的状态、堆栈和优先级等信息。中断服务例程用于处理中断事件,而调度器则负责根据任务的优先级和状态进行任务切换。 除了核心文件外,Keil RTX51 Tiny还提供了一些辅助文件,如时间管理文件和资源管理文件。时间管理文件用于提供定时器的功能,使得开发者可以通过设置定时器来实现任务间的时间片轮转调度。资源管理文件则用于管理共享资源,防止多个任务同时访问造成冲突。 使用Keil RTX51 Tiny可以实现任务的并行执行,提高系统的处理能力和资源利用率。在源代码中,开发者可以根据实际需求定义和编写任务的具体实现代码,并通过调度器进行任务调度和切换。此外,还可以根据需求调整任务的优先级,使得关键任务能够得到更高的执行优先级。 总之,Keil RTX51 Tiny多任务操作系统源代码提供了开发嵌入式系统的基础框架和功能库,开发者可以根据自己的需求进行二次开发和定制,从而实现复杂的任务调度和管理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值