您的位置:首页 > 其它

[UC/OS-II原理及应用]μC/OS-Ⅱ在80x86上的移植

2016-10-15 23:19 246 查看
第十章 μC/OS-Ⅱ在80x86上的移植

10.1 概述

在应用程序主函数中,除了OSInit()之外,还要使用:

PC_VectSet(uCOS, OSCtxSw);  //安装μC/OS-Ⅱ中断向量

在起始任务的代码中,使用:

PC_VectSet(0x80, OSTickISR);  //安装μC/OS-Ⅱ系统时钟中断向量

PC_SetTickRate(OS_TICKS_PER_SEC);  //设置μC/OS-Ⅱ系统时钟周期

 

10.2 任务切换

10.2.1 任务切换函数OSCtxSw()

任务切换函数OSCtxSw()的工作是保存被中止运行任务的断点和恢复待运行任务的断点并启动它。(汇编语言)

10.2.2 任务切换宏OS_TASK_SW()

任务切换宏OS_TASK_SW()的全部工作是想办法主动引发一次中断,然后在中断服务程序中完成任务切换的其他工作。

在任务调度函数OSSched()中调用一次任务切换宏OS_TASK_SW()就执行了一次指令:INT 0x80,即引发了一个内部中断,中断向量码为0x80。

10.2.3 中断级任务切换函数OSIntCtxSw()

中断级任务切换函数OSIntCtxSw()的工作只是恢复待运行任务的断点。

10.3 系统时钟

10.3.1 PC中DOS的系统时钟

在PC中,DOS系统时钟的周期为54.93ms(18.20648Hz)。

DOS操作系统的系统时钟是由PC上配置的硬件定时器产生的。

在80x86系统的中断向量表中,产生DOS系统时钟的硬件定时器所占用的中断向量码为0x08。

10.3.2 PC中μC/OS-Ⅱ的系统时钟

在把μC/OS-Ⅱ向80x86移植时,根据实时系统的要求,把μC/OS-Ⅱ的系统时钟的频率定为200Hz。频率比DOS的时钟频率高得多,所以借用产生DOS系统时钟的定时器的定时信号来产生μC/OS-Ⅱ系统时钟。

DOS的时钟频率 = 200 Hz / 11 = 18.18181818Hz,取18.20648Hz。

10.3.3 μC/OS-Ⅱ系统时钟中断服务程序

除了处理μC/OS-Ⅱ的时间管理事务之外,每发生11次μC/OS-Ⅱ系统时钟中断,μC/OS-Ⅱ系统的时钟中断服务程序OSTickISR()都用“INT
81H”指令引发一次DOS系统时钟的中断,以让DOS处理自己的时间事务,而在其他次数只简单地用EOI指令清除PC机中断控制器的中断标志。


10.3.4 μC/OS-Ⅱ系统时钟中断向量的安装

安装μC/OS-Ⅱ时钟中断向量的工作,一般是在μC/OS-Ⅱ运行的第一个任务中用如下代码:

PC_VectSet(0x80, OSTickISR);  //安装μC/OS-Ⅱ系统时钟中断向量

PC_SetTickRate(OS_TICKS_PER_SEC);  //设置μC/OS-Ⅱ系统时钟频率

并紧接着用PC功能函数来设置μC/OS-Ⅱ的系统时钟频率。

10.3.5 由μC/OS-Ⅱ返回DOS

当μC/OS-Ⅱ的任务结束需要使PC机返回DOS时,要调用函数PC_DOSReturn()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uCOS-II 函数 x86 应用