main.c

 #include "reg51.h"
#include "os_cfg.h"
#define TASK_DELAY0 TIME_PER_SEC/1 //任务执行频度为1Hz
#define TASK_DELAY1 TIME_PER_SEC/2 //任务执行频度为2Hz
#define TASK_DELAY2 TIME_PER_SEC/10 //任务执行频度为10Hz
#define TASK_DELAY3 TIME_PER_SEC/20 //任务执行频度为20Hz void (* code task[])() = {task0,task1,task2,task3}; sbit LED0 = P1^;
sbit LED1 = P1^;
sbit LED2 = P1^;
sbit LED3 = P1^; /*main主函数*/
void main(void)
{
unsigned char i;
os_timer0_init();
EA = ; //开总中断 while()
{
for(i=;i<MAX_TASK;i++)
if (task_delay[i]==) {run(task[i]); break;} //任务优先级调度
}
} void task0(void)
{
LED0 = !LED0;
task_delay[] = TASK_DELAY0;
} void task1(void)
{
LED1 = !LED1;
task_delay[] = TASK_DELAY1;
} void task2(void)
{
LED2 = !LED2;
task_delay[] = TASK_DELAY2;
} void task3(void)
{
static unsigned char state=;
switch (state)
{
case :
LED3 = !LED3;
state = ;
task_delay[] = TASK_DELAY3;
break; case :
LED3 = !LED3;
state = ;
task_delay[] = TASK_DELAY3*;
break; case :
LED3 = !LED3;
state = ;
task_delay[] = TASK_DELAY3*;
break; default:
break;
}
} os_cfg.h #include "reg51.h"
#define TIME_PER_SEC 200 //定义任务时钟频率,200Hz
#define CLOCK 22118400 //定义时钟晶振,单位Hz
#define MAX_TASK 4 //定义任务数量
extern void task0(void);
extern void task1(void);
extern void task2(void);
extern void task3(void);
extern unsigned char task_delay[MAX_TASK];
extern void run(void (*ptask)());
extern void os_timer0_init(void); os_cfg.c #include "os_cfg.h"
unsigned char task_delay[MAX_TASK]; //定时器0初始化
void os_timer0_init(void)
{
unsigned char i;
for(i=;i<MAX_TASK;i++) task_delay[i]=; //赋初值task_delay[0]=0,task_delay[1]=0,task_delay[2]=0,task_delay[3]=0
TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式
TH0 = (-CLOCK/TIME_PER_SEC/) / ; //CRY_OSC,TIME_PER_SEC在easycfg.h中配置
TL0 = (-CLOCK/TIME_PER_SEC/) % ;
TR0 =;
ET0 =; //开启定时器和中断
} // 系统OS定时中断服务
void os_timer0(void) interrupt
{
unsigned char i;
TH0 = (-CLOCK/TIME_PER_SEC/) / ; //CRY_OSC,TIME_PER_SEC在easycfg.h中配置
TL0 = (-CLOCK/TIME_PER_SEC/) % ;
for(i=;i<MAX_TASK;i++) if(task_delay[i]) task_delay[i]--; //每节拍对任务延时变量减1 ,减至 0 后,任务就绪。
} void run(void (*ptask)())
{
(*ptask)();
}


Easy51RTOS入门级初略分析的更多相关文章

  1. FireMonkey 结构性初略分析

    Delphi 下的FireMonkey,很好地实现了 DirectUI与跨平台.学习了解他,对DirectUI编程及项目的跨平台实现有一定帮助.虽然作为开发者个体,并不需要了解太多这些东西,只要求拿来 ...

  2. Hadoop架构的初略总结(1)

    Hadoop架构的初略总结(1) Hadoop是一个开源的分布式系统基础架构,此架构可以帮助用户可以在不了解分布式底层细节的情况下开发分布式程序. 首先我们要理清楚几个问题. 1.我们为什么需要Had ...

  3. Hadoop架构的初略总结(2)

    Hadoop架构的初略总结(2) 回顾一下前文,我们总结了以下几个方面.我们为什么需要Hadoop:Hadoop2.0生态系统的构成:Hadoop1.0中HDFS和MapReduce的结构模型. 我们 ...

  4. WindowsPhone-GameBoy模拟器开发五--使用XNA初略实现Gameboy显示系统

    开篇前,最近弄了个空间,大家不嫌弃的话可以上去讨论讨论J http://www.lihengzhe.cn 这一次,就来简单地实现gameboy的实现机制.先说一下本次内容涉及到的技术,其实也就一项—X ...

  5. libsvm数据处理初略流程

  6. Spring简单的小例子SpringDemo,用于初略理解什么是Spring以及JavaBean的一些概念

    一.开发前的准备 两个开发包spring-framework-3.1.1.RELEASE-with-docs.zip和commons-logging-1.2-bin.zip,将它们解压,然后把Spri ...

  7. Backbone案例的初略理解

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.com/monw3c-logs/217636180.html 先说一下Backbone的执行顺序: ...

  8. 初略 异步IO

    import asyncio asyncio.coroutine() from concurrent.futures import ThreadPoolExecutor def task(): pri ...

  9. Java线程池ThreadPoolExecutor初略探索

    在操作系统中,线程是一个非常重要的资源,频繁创建和销毁大量线程会大大降低系统性能.Java线程池原理类似于数据库连接池,目的就是帮助我们实现线程复用,减少频繁创建和销毁线程 ThreadPoolExe ...

随机推荐

  1. ASP.NET MVC: Razor中的@:和语法

    本文将讨论新版Razor里视图引擎中支持的两个有用的语法功能:@:和<text>语法. 用Razor实现流畅编程 ASP.NET MVC 3配有一个新的名为“Razor”的视图引擎选项(除 ...

  2. k近邻

    k近邻(k-NearestNeighbor)算法简称kNN.基本思想简单直接,对于一个需要分类的数据实例x,计算x与所有已知类别的样本点在特征空间中的距离.取与x距离最近的k个样本点,统计这些样本点所 ...

  3. Openfire Strophe IE跨域问题

    Openfire和Strophejs网站 域名不同如何进行通信,这个问题总算解决,下面是解决步骤. 解决方案一: Chrome浏览器默认支持跨域访问 IE浏览器需要做配置:点击IE浏览器的的“工具-& ...

  4. About vector

    今天打vector又打炸了不!高!兴! vecotr头文件 #include<vector> 定义域 using namespace std; 或using std::vector; 初始 ...

  5. html5画布基础

    canvas 元素用于在网页上绘制图形. 什么是canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canva ...

  6. HTML5 Canvas一些常用的操作

    粗略的Canvas API 1. context var context = canvas.getContext('2d'); 2.Canvas state context.save();//将当前状 ...

  7. 被滥用的for in循环

    众所周知,javascript中有两种for循环,一种是: var a=['this','is','a','article'], i, len; for( i = 0,len = a.length;i ...

  8. Pod(转)

    一.CocoaPods的安装 (1)使用淘宝的Ruby镜像替换官方的ruby源,在终端输入命令 $ gem sources --remove https://rubygems.org/ $ gem s ...

  9. CSS选择器--普通选择器

    普通选择器: 1.标签选择器:使用标签选择器,所有的相同的标签都会被选中.(如:选择div所有的div都被选中.) 2.类选择器:如果一个元素设置了多个类选择器样式,那么这些类选择器都会被设置.但是如 ...

  10. 使用Spring Tool Suite创建Maven Web工程

    使用STS或者Eclipse这样的IDE创建Maven Web工程还真不是一般的麻烦! 看了网上不少的方法介绍,操作下来总有区别,不是这里不对就是那里不对. 下面是尝试了几次之后成功的方法,记录一下. ...