51系列小型操作系统精髓 简单实现2
来源:互联网 发布:华为网络竞赛上机题 编辑:程序博客网 时间:2024/04/30 11:39
在51单片机中,不能直接修改PC,但有一种方法是可以改变PC的。函数调用里会把PC值压入堆栈中,调用结束后,会把PC值弹出到PC中。
能改变PC就可以控制程序流程。
1.在任务中切换出去
#define MAX_TASKS 8 //任务槽最大个数.
unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈.
//保存当前断点 并把SP=SP-2;
task_stack[task_id][0] =*(SP--);
task_stack[task_id][1] =*(SP--);
2.在定时器中,定时时间到就切换回来。
// 实时切换回
SP=task_stack[task_id]+1;
3.还需要存储定时时间
unsigned char idata task_time[MAX_TASKS]; //一个任务一个定时时间
比如定时器定时时间是10ms ,每10ms查询一次各个实时任务时间是否到。到了就切换对应的任务执行。否则各任务定时时间减10ms
#define TIMER_RELOAD() {TL0=0x00;TH0=0xC4;}//使能T/C<span style="white-space:pre"></span> 初始10ms
void Timer0Init()//@18.432MHz{AUXR &= 0x7F;//定时器时钟12T模式TMOD &= 0xF0;//设置定时器模式TMOD |= 0x01;//设置定时器模式TL0 = 0x00;//设置定时初值TH0 =0xC4;//设置定时初值 10msTF0 = 0;//清除TF0标志TR0 = 1;//定时器0开始计时ET0=1;EA=1;}
void tm0_isr() interrupt 1 using 1{<span style="white-space: pre;"></span>//任务时间是否到,任务时间到 实时切换回<span style="white-space: pre;"></span>//定时时间重载<span style="white-space: pre;"></span>TIMER_RELOAD();}
4.还需要什么呢?
0 0
- 51系列小型操作系统精髓 简单实现
- 51系列小型操作系统精髓 简单实现2
- 51系列小型操作系统精髓 简单实现3
- 51系列小型操作系统精髓 简单实现4
- 51系列小型操作系统精髓 简单实现5 执行流程
- 51系列小型操作系统精髓 简单实现6 C语言版待改进
- 51系列小型操作系统精髓 简单实现7 C语言版待改进
- 51系列小型操作系统精髓 简单实现8 C语言版待改进
- 51系列小型操作系统精髓 简单实现9 C语言版优化后发布(有图)
- 51系列小型操作系统精髓 简单实现10 C语言版优化后发布(有图)
- 51系列小型操作系统精髓 简单实现11 C语言版优化后说明(有图)
- 51系列小型操作系统精髓 简单实现12 C语言版再优化
- 51系列小型操作系统精髓 简单实现12 C语言版加保护参数
- 51系列小型操作系统精髓 简单实现12 C语言版未加保护参数
- 【操作系统】小型银行家算法实现
- 小型多任务操作系统miniOS的实现
- 操作系统精髓与设计原理--内存(2)
- 操作系统精髓与设计原理--虚拟内存(2)
- 获取中文全拼音的SQL函数
- ios中推送
- SQL数据库试题
- 视频跟踪的研究
- ios真机调试步骤
- 51系列小型操作系统精髓 简单实现2
- ios发布
- 第十一周作业2
- 十年学会编程
- C语言笔记——符号
- 为现代JavaScript开发做好准备
- 总结一下目标检测与跟踪
- 《老罗Android》学习 Android系统框架
- 一天82万个公款饭局令人瞠目