rtx tiny os
一,简单测试步骤:
1. license management包含两项:artx51 real time os, PK51
2. code
#include "rtx51tny.h"
#include <reg51.h> sbit led0 = P2^;
sbit led1 = P2^;
sbit led2 = P2^; /*在Conf_tny.A51中可配置INT_CLOCK来决定中断使用的周期数也就是时间片,在12HZH的晶振下,INT_CLOCK EQU 10000为10ms,
TIMESHARING EQU?5表示任务的时间片最大为50ms*/ void main_job() _task_
{
os_create_task();//task1 os_create_task();//task2 os_create_task();//task3 os_delete_task();//delet task0
} void led0_job() _task_
{
led0 = ;
for (;;)
{
led0 = !led0;
/*关于os_wait函数的理解第一个参数为等待时间,有三个选项K_SIG(启动信号),K_TMO(超时信号),K_IVL(周期信号)或是组合使用。
第二个参数为等待的滴答时间,设置为10的话就是基准时间片*10,第三个参数未使用,默认设置为0*/
os_wait(K_TMO,,); //延时1s
}
} void led1_job() _task_
{
led1 = ;
for (;;)
{
led1 = !led1;
os_wait(K_TMO,,); //延时1.5s
}
} void led2_job() _task_
{
led2 = ;
for (;;)
{
led2 = !led2;
os_wait(K_TMO,,); //延时1.5s
}
}
3. ok
二、stc15
1.
2
#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 = ;
uint8 xdata buf[];
void delay_ms(unsigned char ms)
{
unsigned int i;
do
{
i = MAIN_Fosc / ;
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 = ; //禁止定时器1中断
TR1 = ; //启动定时器1
ES=;
} void U1SendData(uint8 ch)
{
SBUF = ch; //写数据到UART数据寄存器
while(TI == ); //在停止位没有发送时,TI为0即一直等待
TI = ; //清除TI位(该位必须软件清零)
} void U1SendString(uint8 *s)
{
while (*s) //检测字符串结束标志
{
U1SendData(*s++); //发送当前字符 }
} void Uart1() interrupt UART1_VECTOR using
{
ES = ; // 串口1中断关闭
if (RI) //串行接收到停止位的中间时刻时,该位置1
{
RI = ; //清除RI位 (该位必须软件清零)
Rec_Buf[i] = SBUF; //把串口1缓存SBUF寄存器数据依次存放到数组Rec_Buf中
i++;
if(i>Buf_Max) //接收数大于定义接收数组最大个数时,覆盖接收数组之前值
{
i = ;
}
}
if (TI) //在停止位开始发送时,该位置1
{
TI = ; //清除TI位(该位必须软件清零)
}
ES = ; // 串口1中断打开
} void UART_Send_Byte(unsigned char mydata)
{
ES=;
TI=;
SBUF=mydata;
while(!TI);
TI=;
ES=;
} void UART_Send_Str(char *s)
{
int i=;
while(s[i]!=)
{
UART_Send_Byte(s[i]);
i++;
} }
unsigned int x0,x1,x2;
void job0(void) _task_ {
x0=x1=x2=;
UART_Init( );
UART_Send_Str("The different between K_VIL with K_TMO\x0a\x0d");//结尾的两个转义字符起换行作用
delay_ms(); os_create_task();
os_create_task();
os_create_task();
os_create_task();
while(){
os_wait(K_TMO,,);
x0++;
}
}
void job1(void) _task_ {
while() {
os_wait2(K_IVL,);//os_wait(K_IVL,1,0);使用RTX51tiny中使用os_wait2效率更高
x1++;
}
}
void job2(void) _task_ {
while() {
os_wait2(K_IVL,); //os_wait(K_IVL,1,0);
x2++;
}
}
void job3(void) _task_ {
while() { //取消注释后,系统负担变轻,可以及时响应
//注释下面一句使系统的负担变得很重,不能及时响应job0和job1的延时信号
os_wait2(K_TMO,);
}
}
void job4(void) _task_ {
unsigned char StrTmp[]="hello world";
while()
{
os_wait2(K_IVL,);
sprintf(StrTmp,"%d %d %d%c%c",x0,x1,x2,,);
UART_Send_Str(StrTmp);
UART_Send_Str("\r\n"); }
}
rtx tiny os的更多相关文章
- 一种基于C51单片机的非抢占式的操作系统架构
摘 要:从Keil C51的内存空间管理方式入手,着重讨论实时操作系统在任务调度时的重入问题,分析一些解决重入的基本方式与方法:分析实时操作系统任务调度的占先性,提出非占先的任务调度是能更适合于Kei ...
- Keil工程文件的建立、设置与目标文件的获得
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工 汇编的方法了.机器汇编是通过汇编软件 ...
- keil教程
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者看很多教程都是一头雾水,这个相对简单的教程.KEIL C51编译器的功能不断增强,使你可以更加贴近C ...
- Keil uVISION2 自学教程
Keil uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的 MCS-51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持.PLM.汇编和 C 语言的程序设计, ...
- Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)
ROS在线练习课程正在逐步完善中,目前以ROS官网中文资料制作,可参考: https://www.shiyanlou.com/courses/854 邀请码 U23ERF8H 安装Ubuntu+RO ...
- 嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度 上一篇笔记介绍了一些绕开排程器(或调度程序,scheduler)来进行时间管理的一些小方法.这一篇详细介绍RTX的任务调度原理. RTX主要有 ...
- 嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板
嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板 涉及当调度优先级,会有很多问题,本文中,优先调度和一些战略的主要问题,以应付. 有几个概念如下:(priority invers ...
- 假设写一段代码引导PC开机这段代码是 ? Here is a tiny "OS" :-D
Hello world -- OS 我找到了华科绍志远博士的相关代码,发现他依据MIT的JOS的boot.S 稍作改动.然后单独剥离出来,能够非常好玩~ 资料下载地址: http://download ...
- [转]Top 10 DTrace scripts for Mac OS X
org link: http://dtrace.org/blogs/brendan/2011/10/10/top-10-dtrace-scripts-for-mac-os-x/ Top 10 DTra ...
随机推荐
- springboot之拦截器
拦截器: package com.example.demo; import org.springframework.context.annotation.Bean; import org.spring ...
- 在下载SOPC代码的过程中遇到的一些错误
(1)Error (209015): Can't configure device. Expected JTAG ID code 0x02D120DD for device 2, but found ...
- vmware 进入虚拟机VMware的系统后鼠标不能点
vmware 进入虚拟机VMware的系统后鼠标不能点 1)关闭虚拟机,重启win10,再打开虚拟机好了 2)
- lnmp环境部署脚本-y
系统环境:centos6.X #!/bin/bash#date:2018-01-01## MySQL 安装8版本的话不太适合,有待于添加安装脚本进行测试#新版的MySQL安装需要高版本2.8以上cma ...
- .net Cache 需要注意的地方
CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(ti ...
- PeopleSoft查看所有translate value
下面sql可以列出PS中所有translate value SELECT FIELDNAME, FIELDVALUE, EFFDT, EFF_STATUS, XLATLONGNAME, XLATSHO ...
- 1.express中间件的简介
express中间件的意思 1, 中间件是一个模块.在js中,模块意味着函数,所以中间件是一个函数.那么这个函数长什么样子? 这还要从中间件的功能说起,它拦截http 服务器提供的请求和响应对象,执行 ...
- linux下open-vswitch安装卸载操作
一. ovs 从源码编译安装: 安装依赖项: ? 1 2 3 4 5 6 7 8 9 10 11 # apt install make # apt install gcc # apt install ...
- python之科学函数课——Numpy
一般来讲,数据都是由行列表示的,也就是矩阵,类似于Excel表格一样的东西. 首先我们学习一下Numpy,装好anaconda之后默认是装好的,下面是numpy的一些函数库:Numpy是科学计算库,是 ...
- C#客户端和服务端数据的同步传输 (转载)
客户端: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...