#include "STC12C5A.H"





#define TIMER_RELOAD()  {TL0=0x00;TH0=0xC4;}//使能T/C
 初始10ms





#define MAX_TASKS 8 //任务槽最大个数.

unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈.  PC指针为16位,需2个字节。

unsigned char idata task_time[MAX_TASKS]; //定时时间

unsigned char task_id=0; //当前活动任务号





void rtos_wait(unsigned char time)

{





//保存当前任务时间

task_time[task_id]=time;





//保存当前断点 并把SP=SP-2,任务切换到下一任务;

task_stack[task_id][1] =*((unsigned char *)(SP));

SP--;

task_stack[task_id][0] =*((unsigned char *)(SP));

SP--;







//任务号

if(++task_id == MAX_TASKS)

task_id = 0;

}

unsigned char a=0;

unsigned char b=0;

void task_test()

{

while(1)

{

a++;

rtos_wait(100);
//运行完后,记录下一步地址,返回

a++;





}

}

void task_test2()

{

while(1)

{

b++;

rtos_wait(10);
//运行完后,记录下一步地址,返回

b++;

}

}

void Timer0Init() //@18.432MHz

{

AUXR &= 0x7F;
//定时器时钟12T模式

TMOD &= 0xF0;
//设置定时器模式

TMOD |= 0x01;
//设置定时器模式

TL0 = 0x00;
//设置定时初值

TH0 =0xC4;
//设置定时初值 10ms

TF0 = 0;
//清除TF0标志

TR0 = 1;
//定时器0開始计时





ET0=1;

EA=1;

}

void main()

{

Timer0Init();

task_test();

task_test2();

while(1);

}

void rwcl() //任务时间是否到,任务时间到 实时切换回

{

//从把定时时间减1 ,找看哪个任务到
,任务时间到 实时切换回

unsigned char i;

for(i=0;i<MAX_TASKS;i++)

{

if(task_time[i])

{

task_time[i]--;

if(task_time[i]==0)

SP=task_stack[i]+1;


}

}

}

void tm0_isr() interrupt 1 using 1

{

  //定时时间重载

TIMER_RELOAD();





rwcl();
//任务时间是否到,任务时间到 实时切换回

}

51系列小型操作系统精髓 简单实现6 C语言版待改进的更多相关文章

  1. 简单的51单片机多任务操作系统(C51)

    在网上看到这段代码,所以自己尝试了,可以跑起来,但是没有精确的定时功能,仅仅是任务的调度而已. 数组中是11,而不是12.这里写错了... /* 简单的多任务操作系统 其实只有个任务调度切换,把说它是 ...

  2. 用Qt写软件系列三:一个简单的系统工具(上)

    导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...

  3. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  4. 《zw版·Halcon-delphi系列原创教程》简单的令人发指,只有10行代码的车牌识别脚本

    <zw版·Halcon-delphi系列原创教程>简单的令人发指,只有10行代码的车牌识别脚本 简单的令人发指,只有10行代码的车牌识别脚本      人脸识别.车牌识别是opencv当中 ...

  5. VS调试在Win7(vista系列)操作系统下 HttpListener拒绝访问解决办法

    一. VS调试在Win7(vista系列)操作系统下 HttpListener无法绑定多个 指定IP.端口问题 来自:http://www.cnblogs.com/ryhan/p/4195693.ht ...

  6. 在51系列中data,idata,xdata,pdata的区别

    在51系列中data,idata,xdata,pdata的区别: data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码 也最小. idata:固定指前面 ...

  7. <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)

    <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步 并发问题是所有问题的基础,也是操作系统设计的基础.并发包括很多设计问题,其中有进程间通信,资源共享与竞争,多个 ...

  8. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  9. 51系列xdata、idata、data的用法

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

随机推荐

  1. numpy 细节问题

    1. np.expand_dims >> X = np.random.randint(0, 9, (2, 3)) >> mean_X = np.mean(X, axis=0) ...

  2. python opencv3 —— 常用工具、辅助函数、绘图函数(图像添加文本、矩形等几何形状)

    1. cv2.hconcat().cv2.vconcat() 将从摄像头捕获的多个图像帧,横向(cv2.hconcat)或纵向(cv2.vconcat)拼接到一起,使得可以在一个 window 中进行 ...

  3. POJ 3169 Layout (HDU 3592) 差分约束

    http://poj.org/problem?id=3169 http://acm.hdu.edu.cn/showproblem.php?pid=3592 题目大意: 一些母牛按序号排成一条直线.有两 ...

  4. 全面详细介绍一个P2P网贷领域的ERP系统的主要功能

        一般的P2P系统,至少包括PC网站的前端和后端.前端系统的功能,可以参考"P2P系统哪家强,功能其实都一样" http://blog.csdn.net/fansunion/ ...

  5. 【Codeforces Round #440 (Div. 2) C】 Maximum splitting

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定用尽量多的4最好. 然后对4取模的结果 为0,1,2,3分类讨论即可 [代码] #include <bits/stdc++ ...

  6. [Angular] Configurable Angular Components - Content Projection and Input Templates

    We are going to have a modal component: <au-modal > </au-modal> And we can pass default ...

  7. [Angular 2] BYPASSING PROVIDERS IN ANGULAR 2

    Artical --> BYPASSING PROVIDERS IN ANGULAR 2 Here trying to solve one problem: On the left hand s ...

  8. AE中地图查询方式

    樱木 原文 AE中地图查询方式 地图查询主要有两种查询:空间查询和属性查询 所用到知识点: 1  Cursor(游标)对象 本质上是一个指向数据的指针,本身不包含数据内容,提供一个连接到ROW对象或者 ...

  9. hadoop调优之一:概述 分类: A1_HADOOP B3_LINUX 2015-03-13 20:51 395人阅读 评论(0) 收藏

    hadoop集群性能低下的常见原因 (一)硬件环境 1.CPU/内存不足,或未充分利用 2.网络原因 3.磁盘原因 (二)map任务原因 1.输入文件中小文件过多,导致多次启动和停止JVM进程.可以设 ...

  10. hprof教程 分类: B1_JAVA 2015-03-02 12:18 444人阅读 评论(0) 收藏

    大部分内容参考http://www.linuxidc.com/Linux/2012-04/58178.htm J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profili ...