rtx tiny os

一,简单测试步骤:

1.  license management包含两项:artx51 real time os, PK51 

2. code   

#include "rtx51tny.h"
#include <reg51.h>
 
sbit led0 = P2^0;
sbit led1 = P2^1;
sbit led2 = P2^2;
 
/*在Conf_tny.A51中可配置INT_CLOCK来决定中断使用的周期数也就是时间片,在12HZH的晶振下,INT_CLOCK EQU 10000为10ms,
        TIMESHARING EQU?5表示任务的时间片最大为50ms*/
        
void main_job() _task_ 0   
{   
    os_create_task(1);//task1   
        
    os_create_task(2);//task2   
        
    os_create_task(3);//task3  
        
    os_delete_task(0);//delet task0  
}   
  
void led0_job() _task_ 1    
{     
    led0 = 0;
    for (;;)       
    {   
        led0 = !led0; 
        /*关于os_wait函数的理解第一个参数为等待时间,有三个选项K_SIG(启动信号),K_TMO(超时信号),K_IVL(周期信号)或是组合使用。
        第二个参数为等待的滴答时间,设置为10的话就是基准时间片*10,第三个参数未使用,默认设置为0*/
        os_wait(K_TMO,100,0); //延时1s
    }    
}   
  
void led1_job() _task_ 2    
{       
    led1 = 0;
    for (;;)   
    {      
       led1 = !led1;    
        os_wait(K_TMO,100,0);      //延时1.5s    
    }   
}  
 
void led2_job() _task_ 3    
{   
    led2 = 0;
    for (;;)   
    {   
        led2 = !led2;         
        os_wait(K_TMO,100,0);    //延时1.5s
    }   
}  
View Code

3. ok

二、stc15

1. 

#define MAIN_Fosc        11059200L    //定义主时钟 
#define Main_Fosc_KHZ    (MAIN_Fosc / 1000) 

#include    "15W4KxxS4.h" 
#include <rtx51tny.h>
 
#include <stdio.h>
 



#define Buf_Max 5    
#define  uint8    unsigned char 
#define  uint16   unsigned int 
//#define  uchar    unsigned char
uint8 data Rec_Buf[Buf_Max];
uint8 i = 0;  
uint8  xdata buf[20];
 void  delay_ms(unsigned char ms) 
{
     unsigned int i;
         do
         {
          i = MAIN_Fosc / 13000;
                while(--i)    ;   //14T per loop
     }
         while(--ms);
}
 
void UART_Init(void)        
{
     SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x40;        //定时器1时钟为Fosc,即1T
    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;        //设定定时器1为16位自动重装方式
    TL1 = 0xE0;        //设定定时初值
    TH1 = 0xFE;        //设定定时初值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1
     ES=1; 
}
 
void U1SendData(uint8 ch)
{
    SBUF = ch;                  //写数据到UART数据寄存器
        while(TI == 0);             //在停止位没有发送时,TI为0即一直等待
        TI = 0;                     //清除TI位(该位必须软件清零)
}

 
void U1SendString(uint8 *s)
{
    while (*s)                    //检测字符串结束标志
    {
        U1SendData(*s++);         //发送当前字符
             
            
    }
}

void Uart1() interrupt UART1_VECTOR using 1
{
    ES = 0;                       // 串口1中断关闭
    if (RI)                       //串行接收到停止位的中间时刻时,该位置1
  {
      RI = 0;                   //清除RI位 (该位必须软件清零)
            Rec_Buf[i] = SBUF;       //把串口1缓存SBUF寄存器数据依次存放到数组Rec_Buf中
            i++;                      
        if(i>Buf_Max)             //接收数大于定义接收数组最大个数时,覆盖接收数组之前值
                {
                    i = 0;                 
                }           
   }
   if (TI)                    //在停止位开始发送时,该位置1
   {
      TI = 0;                 //清除TI位(该位必须软件清零)
   }
     ES =  1;                   // 串口1中断打开
}


void UART_Send_Byte(unsigned char mydata)    
{
 ES=0;
 TI=0;
 SBUF=mydata;
 while(!TI);
 TI=0;
 ES=1;
}

 
void UART_Send_Str(char *s)
{
 int i=0;
 while(s[i]!=0)
 {
     UART_Send_Byte(s[i]);
     i++;
 }
 
}
 unsigned int x0,x1,x2;
void job0(void) _task_ 0 {
  x0=x1=x2=0;
  UART_Init( );
  UART_Send_Str("The different between K_VIL with K_TMOx0ax0d");//结尾的两个转义字符起换行作用
    delay_ms(200);
    
  os_create_task(1);
  os_create_task(2);
  os_create_task(3); 
  os_create_task(4);
  while(1){
   os_wait(K_TMO,1,0);
   x0++;
  }
}
 void job1(void) _task_ 1{
  while(1) {
  os_wait2(K_IVL,1);//os_wait(K_IVL,1,0);使用RTX51tiny中使用os_wait2效率更高
  x1++;
  }
}
 void job2(void) _task_ 2{
   while(1) { 
   os_wait2(K_IVL,1); //os_wait(K_IVL,1,0);
   x2++;
    }
}
void job3(void) _task_ 3{
  while(1) { //取消注释后,系统负担变轻,可以及时响应
 //注释下面一句使系统的负担变得很重,不能及时响应job0和job1的延时信号
   os_wait2(K_TMO,1);
 }
} 
void job4(void) _task_ 4{
 unsigned char StrTmp[18]="hello world";
 while(1)
 {
  os_wait2(K_IVL,50);
   sprintf(StrTmp,"%d %d %d%c%c",x0,x1,x2,10,13);
  UART_Send_Str(StrTmp);
     UART_Send_Str("
");
 
 }
}
View Code
原文地址:https://www.cnblogs.com/https/p/10209031.html