关于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. 查看 ios 真机调试log,导出log

    使用Xcode 在模拟器李敏运行的时候,可以直接通过xcode 查看log,但是真机测试的时候,xcode 却无法获取到,对于日志输出,可以先保存到真机上,之后通过iTunes 导出即可 修改源码 此 ...

  2. 终于懂了:TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处)

    我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedur ...

  3. Scanner类及正则表达式

    import java.util.Scanner; public class ScannerToString { public static void main(String[] args) { Sc ...

  4. gcc中__attribute__ ((constructor(101)))做成.a库成功链接

    1.cpp:------------------------------------------------ #include int test() __attribute__ ((construct ...

  5. Webserver管理系列:11、注意默认的隐含共享

    安装完Windows Server 2008之后默认的c/d/e...磁盘是共享的. 我们能够通过取消"Microsoft网络的文件和打印机共享"服务来阻止别人訪问我们的共享文件:

  6. 1038. Recover the Smallest Number (30) - 字符串排序

    题目例如以下: Given a collection of number segments, you are supposed to recover the smallest number from ...

  7. Swift - 设置UIView的背景色和背景图片

    1,使用UIColor的内置颜色设置背景色 1 2 var page = UIView() page.backgroundColor = UIColor.greenColor() 2,设置自定义颜色 ...

  8. Swift - 自定义单元格实现微信聊天界面

    1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 (3)每条消息旁边有头像,在左边表示 ...

  9. WebGL自学教程——WebGL演示样本:开始

    最终开始WebGL样品演示,...... 开始 使用WebGL步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊>中的 ...

  10. VirtualBox集群建立和网络配置

    安装 1. 安装 安装Oracle VM VirtualBox之后,新建一个虚拟机,制定好内存等信息,开始安装操作系统,这里安装ubuntu-12.04.2-desktop-i386版本. 2. 拷贝 ...