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. 关于C#调用C++ 的DLL传送字符串显示乱码的解决

    最近在做一个程序,想把某些功能用C++写成DLL供C#调用,但是在写好DLL用C#传递字符串参数时,在DLL中显示传送过来的字符串是乱码,DLL里的代码根本无法用这些字符串进行其它的处理.为此,花了一 ...

  2. LINQ之路10:LINQ to SQL 和 Entity Framework(下)

    在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术 ...

  3. ES6 Map/WeakMap

    最近项目用ES6来写,许多语法都要逐步熟悉呀,今天收藏下Map用法 1.Map构造器 // 字符串作为key, 和JS对象类似 var map = new Map() // set map.set(' ...

  4. Mysql 启动错误:the server quit without updating pid

    接到任务看看mysql为啥起不来,就上服务器上看了看,确实起不来,至于之前发生了啥也不知道. 服务器Ubuntu,mysql-5.6 1.先试下mysql登陆 mysql -uroot -p 发现报错 ...

  5. OneSQL助力永辉超市大卖特卖

    数据库集群查询达到10w/s,更新操作5k/s,正常! 应用并发连接达到历史高峰4倍,正常! 业务平稳运行,正常! 永辉微店527大促,圆满成功!这标志着平民软件数据库工程师.accenture咨询实 ...

  6. js触发按钮点击事件

    js触发按钮点击事件 博客分类: javascript   模拟JS触发按钮点击功能 <html> <head> <title>usually function&l ...

  7. checkbox点击后出现div

    HTML: <div class="msg_editUrl_function"> <label class="labelChecked" fo ...

  8. 收集C#常用类:产生一个验证码,改了下

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...

  9. 无法启动xwindow

    1 新建一个lqx用户,执行startx命令出现: Fatal server error: PAM authentication failed, cannot start X server. perh ...

  10. PIL中的Image和numpy中的数组array相互转换

    1. PIL image转换成array img = np.asarray(image) 需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是&quo ...