中自网

热门搜索:PID  plc  传感器  电机  变频器  工业以太网  无线通讯  低压 

当前位置:首页>>应用案例首页>>专业论文>>正文

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

发布日期:2013-05-15   浏览次数:47342
分享到:
【摘   要】: 假设某仪器要实现A/D采样、输入控制、显示等功能.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个字节,其他与任务级切换一样.

 
 
[ 应用案例搜索 ]  [ ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]  [ 返回顶部 ]

0条 [查看全部]  网友评论