uC/OS-Ⅱ中任务切换的仪器仪表的实现实例

时间:2020-11-01 09:28:17 机电毕业论文 我要投稿

关于uC/OS-Ⅱ中任务切换的仪器仪表的实现实例

  假设某仪器要实现A/D采样、输入控制、显示等功能。uC/OS-Ⅱ操作系统将对这三个任务进行管理,协调各自工作。任务描述:

  统计任务:每做完例行统计后执行一次显示输出;初始任务:每隔10节拍进行一次A/D采样;用户任务:每秒判断一次是否有输入控制信号。

  实验中为了测量与观察方便,采用对89C51的P1口每次取反的操作来模拟仪器执行的任务,由于关心的是操作系统的`性能,而非任务本身,因此简化是可行的。

  设置时钟节拍:50Hz三个任务(包含系统空闲任务):

  任务名优先级操作空闲任务63空操作统计任务62每秒做一次统计并对P1。2取反初始任务4每秒对P1。0取反一次用户任务5每10个节拍对P1。1取反一次设计中须注意以下两点:

  (1)任务的现场保护:除PUSH到堆栈的CPU寄存器外,还应包括任务运行过程中保存到堆栈的信息,所以每次保存的信息量是变化的。

  (2)任务堆栈的大小应根据实际情况充分估计,避免过大或者不足。

  在这个例子中定义了TASK STK SIZE(任务堆栈)为64个字节,故在内部RAM中预留出64个字节作为操作系统的系统堆栈,用全局变量定义如下:

  INT8U idata sp[64] at 0x30;该语句表示系统堆栈从30H开始。

  (1)开始多任务调度每个任务堆栈初始化情况:

  堆栈指针SP=48-1+8+5+2+2+sizeof(void*),即系统堆栈放入以上信息后SP指针所指的位置。

  下面开始多任务调度:

  系统堆栈指针SP初始值30H,将初始任务的任务堆栈内容(在xdata段)Load到系统堆栈内,完成后SP应指向系统堆栈栈顶,然后运用pop指令切换到初始任务。

  (2)在任务运行中进行任务切换切换前系统堆栈为:

  将系统堆栈中从当前SP开始一直到30H的堆栈信息保存到当前任务堆栈中,然后把新任务的任务堆栈的内容Load到系统堆栈中来。

  然后用POP指令将任务切换到新任务中去。

  (3)在中断返回时切换任务须保存的信息在中断时应保存,切换任务时,只要将SP减去由于调用OSIntExit()和OSIntCtxSw()两个函数而使SP指针增加的4个字节,其他与任务级切换一样。

【关于uC/OS-Ⅱ中任务切换的仪器仪表的实现实例】相关文章:

1.关于JAVA实现httpClient的实例

2.PHP实现RSA加密类的实例解析

3.关于jquery简单图片切换显示效果实现方法介绍

4.有关javascript实现的多个层切换效果通用函数示例

5.JavaScript实现的div拖动效果实例代码

6.PHP中curl的使用实例

7.关于javascript中cookie对象用法的实例分析

8.关于jQuery实现页面顶部显示的进度条效果完整实例

9.JavaScript快速排序实现实例教程