zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    剑指OFFER之合并有序链表(九度OJ1519)
    剑指OFFER之反转链表(九度OJ1518)
    剑指OFFER之链表中倒数第k个节点(九度OJ1517)
    一分钟教你在博客园中制作自己的动态云球形标签页
    剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)
    剑指OFFER之打印1到最大的N位数(九度OJ1515)
    剑指OFFER之矩形覆盖(九度OJ1390)
    剑指OFFER之数值的整数次方(九度OJ1514)
    剑指OFFER之变态跳台阶(九度OJ1389)
    剑指OFFER之二进制中1的个数(九度OJ1513)
  • 原文地址:https://www.cnblogs.com/https/p/10209031.html
Copyright © 2011-2022 走看看