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. hdu 5506 GT and set dfs+bitset优化

    GT and set Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  2. spice命令使用

    spicec.exe -h 192.168.1.1 -p 5912 -w 主机 物理机IP 端口号 主机

  3. antd 学习

    1,react中文文档http://reactjs.cn/react/docs/thinking-in-react-zh-CN.html 2,antd文档 https://ant.design/doc ...

  4. MFC编程入门之二十(常用控件:静态文本框)

    上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控 ...

  5. java中使用队列:java.util.Queue (转)

    Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类 ...

  6. C#获取CSV文件内容对逗号和引号分隔的处理

    我们知道,使用excel工具保存成csv文件时有几个规则: 1.每一行的单元格内容之间用逗号分隔. 2.如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含. 3.如果单元格的内容本身有引号 1 ...

  7. Oracle转MySQL

    1. to_date 直接去掉 例如 select log.id from CM_LOGINLOG log  where log.orgid =?  and log.isAuto =?  and lo ...

  8. 【java项目小记--JManager】项目开始原因及github部署

    --记于2016-8-11 毕业已三载,忽然想起大学时的毕业设计项目,想到曾在毕业答辩上说,会吸取老师点评并逐渐完善该项目.而今 老师点评已忘了个干净,项目也还是毕业时的样子,正好最近有些时间,打算兑 ...

  9. eclipse: The superclass "javax.servlet.http.HttpServlet" was not found 解决方案

    解决步骤: 1. 安装Tomcat8.5 Server 2. eclipse 新建Tomcat 8.5 Server 3. 配置build path 添加  Server Runtime 1.右键项目 ...

  10. windows socket

    //服务器 // winsvr.cpp : Defines the entry point for the console application. // #include "stdafx. ...