关于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应用实例的更多相关文章

  1. 正则语言引擎:一个简单LEX和YACC结合运用的实例

    本文先描述了LEX与YACC的书写方法.然后利用LEX与YACC编写了一个简单正则语言的引擎(暂时不支持闭包与或运算),生成的中间语言为C语言. 正则引擎应直接生成NFA或DFA模拟器的输入文件,但在 ...

  2. Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(图文并茂,还有实例下载)

    [文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...

  3. (转)微服务_创建一个简单的Eureka注册中心

    原文地址:https://www.cnblogs.com/lplshermie/p/9105329.html 微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习Spring ...

  4. 创建一个简单的Eureka注册中心

    微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习SpringCloud,就从Eureka开始.他们俩就不做介绍了,网上的说明一堆,随便打开一个搜索引擎输入关键字都足够了解 ...

  5. RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

     一,RTX51 Tiny简单介绍    RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...

  6. IDDD 实现领域驱动设计-一个简单的 CQRS 示例

    上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga ...

  7. 【转】用C写一个简单病毒

    [摘要]在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现. [Abstract] This paper introduce the charateristic of t ...

  8. [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧

     前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...

  9. 关于apriori算法的一个简单的例子

    apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...

随机推荐

  1. Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)

    C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  2. 跟Google学习Android开发-起始篇-与其它应用程序交互(2)

    6.2从活动获取结果 启动另一个活动不必是单向的.您也可以启动另一个活动,并接收一个结果回来.为了接收一个结果,调用startActivityForResult()(而不是startActivity( ...

  3. keyset与entryset

    1.基本概述 Set<Map.Entry<K,V>> entrySet()  返回此映射中包括的映射关系的 set 视图. Set<K>              ...

  4. camel-name-utils 在驼峰风格跟下划线风格之间切换

    用处 用来将字符串在驼峰风格跟下划线风格之间切换. 对于一般人可能没用.对于写orm框架的人有点作用. 样例: company_name -> companyName 安装方式 加入下面依赖到p ...

  5. !!!!!安卓界面总是显示载入进度条的问题,没事别乱用ListFragment

    近期的安卓应用快完工了.可是个别界面有瑕疵,怎么改动都解决不了.挥之不去的阴影.问题例如以下: 在界面上,数据已经载入完成了.可还是有一股圆形的进度条,感觉它老是在载入什么东西,严重影响界面美观: 1 ...

  6. (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

    文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 一.GET和POST的对比: 在漫长的时间当中,其他的方法逐渐的退出了历史舞台,最常用的只剩下GE ...

  7. Linux入门基础 #10:命令行文本处理工具

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  8. 解决Andriod使用HttpURLConnection 失败问题

    在Android的Activity中使用HttpURLConnection连接到服务端时抛出异常,Access denied.第一个想到是权限问题.然后就尝试将INTERNET权限加上:在Manife ...

  9. [SVN]两个分支合并

    Date:2014-1-1 Summary: 记录一下自己使用SVN时候的操作步骤,先吃鱼,再学钓鱼 Contents: 环境:从同事的branch迁出一份代码,作为自己的分支进行开发,同时同事也在自 ...

  10. CI(codeigniter)框架,routes.php设置正确,但是显示服务器错误,是__construct少写了一个下划线

    今天弄了一下CI框架,大概看了一下文档,感觉CI框架非常精简,但是在做的时候遇到了问题,CI文档中提供了一个新闻系统的例子,所有工作都做完了,在浏览器中打开相对应的url是,却显示“服务器错误”,一点 ...