一个简单而经典的RTX51 Tiny应用实例
关于RTX51 Tiny嵌入式实时操作系统的描写叙述请參考本人的上一篇博文(RTX51
Tiny实时操作系统学习笔记—初识RTX51 Tiny)。
本篇博文。我将通过一个实例代码,带大家深入了解一下RTX51 Tiny,让大家认识到RTX51 Tiny的魅力和方便之处。
以下的代码将要实现的功能是:使LED0每隔1秒切换一次状态(ON/OFF)。LED1每0.7秒切换一次状态。LED2每0.4秒切换一次状态,LED3每0.2秒切换一次状态。
下面是我的代码:
/*******************************************************
task1 : LED0每 1s改变一次状态
task2 :LED1每0.7s改变一次状态
task3 :LED2每0.4s改变一次状态
task4 :LED3每0.2s改变一次状态
*******************************************************/
#include <rtx51tny.h>
#include <reg52.h> typedef unsigned char uchar;
typedef unsigned int uint; sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3; sbit KEY0 = P1^7; void job0(void) _task_ 0
{
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1; //关闭四个LED os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
os_create_task(3); //创建任务3
os_create_task(4); //创建任务4
os_create_task(5); //创建任务5
os_delete_task(0); //删除自己(task0),使task0退出任务链表
} void job1(void) _task_ 1
{
while(1){
LED0 = !LED0;
os_wait(K_TMO, 100, 0); //等待100个时钟滴答(ticks),即1s
//配置文件ConfTny.A51中INT_CLOCK EQU 10000; default is 10000 cycles
//意思是时钟滴答为10000个机器周期。即10000*1uS=10ms
}
} void job2(void) _task_ 2
{
while(1){
LED1 = !LED1;
os_wait(K_TMO, 70, 0); //等待(延时)0.7s
}
} void job3(void) _task_ 3
{
while(1){
LED2 = !LED2;
os_wait(K_TMO, 40, 0); //等待(延时)0.4s
}
} void job4(void) _task_ 4
{
while(1){
LED3 = !LED3;
os_wait(K_TMO, 20, 0); //等待(延时)0.2s
}
} void job5(void) _task_ 5
{
while(1){
if(0 == KEY0){ //推断按键是否按下
LED3 = 1;
os_delete_task(4); //按键按下时关闭LED3,使task4退出任务链表,LED3不再闪烁
}
}
}
代码分析:
在RTX51 Tiny应用中,我们不须要编写main函数。由于main函数已经由RTX51
Tiny内核实现了。一个基于RTX51 Tiny的应用程序,都是从任务0(task0)開始执行的。上面的代码中。除了task0之外,其它的任务都是一个while(1)死循环。task0的作用是负责系统的初始化,上述代码在这个任务中首先关闭了四个LED。然后通过os_create_task(id)函数创建了五个任务,task0的最后一个步骤是通过os_delete_task(id)函数删除自身,使task0退出任务链表。
task1~task4分别控制LED0~LED3以不同的频率闪烁。task5用来实现按键检測。当检測到按键按下时。使LED3关闭并使LED3的控制任务退出系统。
一个简单而经典的RTX51 Tiny应用实例的更多相关文章
- 正则语言引擎:一个简单LEX和YACC结合运用的实例
本文先描述了LEX与YACC的书写方法.然后利用LEX与YACC编写了一个简单正则语言的引擎(暂时不支持闭包与或运算),生成的中间语言为C语言. 正则引擎应直接生成NFA或DFA模拟器的输入文件,但在 ...
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(图文并茂,还有实例下载)
[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...
- (转)微服务_创建一个简单的Eureka注册中心
原文地址:https://www.cnblogs.com/lplshermie/p/9105329.html 微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习Spring ...
- 创建一个简单的Eureka注册中心
微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习SpringCloud,就从Eureka开始.他们俩就不做介绍了,网上的说明一堆,随便打开一个搜索引擎输入关键字都足够了解 ...
- RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny
一,RTX51 Tiny简单介绍 RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...
- IDDD 实现领域驱动设计-一个简单的 CQRS 示例
上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga ...
- 【转】用C写一个简单病毒
[摘要]在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现. [Abstract] This paper introduce the charateristic of t ...
- [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...
- 关于apriori算法的一个简单的例子
apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...
随机推荐
- find-a-jar-file-given-the-class-name
Save this as findclass.sh (or whatever), put it on your path and make it executable: #!/bin/sh find ...
- js之checkbox的代码全选/全不选,使用id获取元素,而不是name
每当有多个选项的时候,都会有一种想法是:全选,全不选,如果子选项有被选,父选项也得被选. 注意:这里是根据id来获取元素的,但是不能直接用getElementById,因为那只能返回一个,而不是集合. ...
- VC/MFC 在ListCtl 控件中随鼠标移动提示单元格信息
BEGIN_MESSAGE_MAP(CTipListCtrl, CListCtrl) //{{AFX_MSG_MAP(CTipListCtrl) ON_WM_MOUSEMOVE() ON_WM_DES ...
- c/c++ unix ipc
c/c++ unix ipc 一个例子 //c_unix.c #include <stdio.h> #include <sys/types.h> #include <sy ...
- Processing_百度百科
Processing_百度百科 Processing
- MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!
Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My ...
- hdu 4055 Number String(有点思维的DP)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Delphi使用大图标编译程序
在Windows Vista. Windows7以上Windows系统中可以支持大图标显示了,但是Delphi编译出来的程序却只能显示32x32的图标,这使Delphi编译的程序看起来很不专业.下面就 ...
- java thread reuse(good)
I have always read that creating threads is expensive. I also know that you cannot rerun a thread. I ...
- 关于智普 - 千人免费学|Python培训|国内最权威python培训|html5
关于智普 - 千人免费学|Python培训|国内最权威python培训|html5 智普教育隶属于北京顶嵌开源科技有限公司,成立于2008年. 智普开源是基于Linux系统的互联网开源学习平台,讲求务 ...