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

第十章 μ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()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值