[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()。
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()。
相关文章推荐
- [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]在ARM7上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]在ARM7上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]动态内存管理
- [uC/OS-II原理及应用]嵌入式实时操作系统的基本概念
- uc/OS II移植中软件中断的理解与应用
- [uC/OS-II原理及应用]信号量集
- [uC/OS-II原理及应用]UC/OS-II中的任务
- [UC/OS-II原理及应用]动态内存管理
- [uC/OS-II原理及应用]uC/OS-II的中断和时钟
- [UC/OS-II原理及应用]μC/OS-Ⅱ可裁剪性的实现
- [uC/OS-II原理及应用]任务的同步与通信
- [uC/OS-II原理及应用]信号量集
- UC/OS-II的详细移植笔记 两种处理器的移植比较(S1C33209和S3C44B0X)
- uC/OS-II在ARM微处理器上的移植
- 移植uC/OS-II到瑞萨的单片机,添加信号量功能
- 基于Nios软核CPU的uC/OS-II和LwIP移植
- uC/OS-ii移植详解
- uc/os-II的内存改进与实现TLSF算法的详解,移植实现(三)