51系列小型操作系统精髓 简单实现6 C语言版待改进
#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();
//任务时间是否到,任务时间到 实时切换回
}
最新文章
- video.js-H5视频播放库
- 深入理解JPEG图像格式Jphide隐写
- HTML5系列一(属性概述)
- [LeetCode] Rotate Image
- Sqoop-1.4.6.bin__hadoop-2.0.4-alpha 环境搭建
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- Careercup - Facebook面试题 - 23869663
- EntityFramework 和 linq 判断是否在指定时间段内的方法
- Poj 3580-SuperMemo Splay
- iOS开发总结-UIWebView 集成 浏览器
- 手机root初体验
- Visual Studio 2015 Professional 破解
- Kia&#39;s Calculation hdu4726
- 让intellij idea 14 支持ES6语法
- char数组中除去某个元素
- Spring boot 源码分析(一)SpringApplication.run(上)
- EXCE 表格导入导出遇到问题(easypoi)
- oracl遇到的问题
- winform的水印TextBox
- Dynamic CRM 2016 的备份/恢复/重新部署
热门文章
- C语言深度剖析-----内存管理的艺术
- POJ 2402 Palindrome Numbers(LA 2889) 回文数
- UVA 10340 - All in All 水~
- 10.13 android输入系统_多点触摸驱动理论与框架
- 2015第30周四Java日志组件
- POJ 2387 Til the Cows Come Home (Dijkstra)
- 【编程】常见概念的理解 —— inplace、vanity url、vanilla(code/software)、编译、链接、build、(delegate、proxy)
- Centos6.5 VNC 配置
- Matlab图像处理系列4———图像傅立叶变换与反变换
- [RxJSv&; Javascript] forkJoin (reactive Promise.all) &; Map