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 ...
随机推荐
- [C#]位运算符
参考链接: http://www.runoob.com/csharp/csharp-operators.html 表: 简单来说,就是: &:全1为1,否则为0 |:有1为1,否则为0 ^:不 ...
- 配置NFS
主机端 sudo apt-get install nfs-kernel-server 修改配置文件 sudo vim /etc/exports 添加: /home/nfs/fs_qtopia *(rw ...
- OGG-01091 Unable to open file "./dirdat/cs001481" (error 2, No such file or directory)
记一次ogg报错ogg-01091的处理过程 现场有一套RAC数据库的服务器异常重启,其中一个节点上部署了OGG,机器开机之后,发现OGG所有应用进程abended状态,查看日志,发现报错如下图: 分 ...
- QT与opencv(二)开启摄像头
OpenCV中的VideoCapture不仅可以打开视频.usb摄像头,还可以做很多事,例如读取流媒体文件,网络摄像头,图像序列等. 下面我简单介绍一个在Qt中用VideoCapture类打开笔记本电 ...
- ServletContextListener中的方法contextInitialized执行了两次
有一个web06项目是直接拷贝web05的,复制过后web06项目默认的web配置中的Context Root还是web05,导致tomcat在启动时还是会创建两个web应用,修改成web06后,cl ...
- 关于vue
render:(h)=>h(App):声明App组件的内容 挂载到节点 const root=document.createElement("div")document.bo ...
- python算法之冒泡排序和选择排序
一.冒泡排序(Bubble sort) Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorith ...
- azkaban的简单使用
简单使用 create job 右上角 project创建成功 创建job并上传至该project [root@localhost ~]# cat command.job #command.job t ...
- 【COCI 2015/2016 #3】Nekameleoni
题目描述 “这好难啊,我有一个简单点的题,他们解决不了.” AKPAKP有一个长度为nn的线段,这个线段原来染有颜色,AKPAKP只认识kk种颜色.当然原来的颜色也包含在着kk种颜色之间. 可以进行m ...
- vs2015 工具栏添加控件
就是“添加”——“组件(N)”,然后把需要的代码写进去,但是工具栏里面却显示不出来. 结果是得重启系统才行,重启之后的确显示在工具栏显示出来了,但是拖到设计界面的时候还会出现“未能加载工具箱项xxx, ...