没有合适的资源?快使用搜索试试~ 我知道了~
首页uC/OS-II在VC下的移植
uC/OS-II在VC下的移植
需积分: 9 18 下载量 130 浏览量
更新于2023-03-16
评论
收藏 79KB DOC 举报
本文只是重点讲解移植到VC下和其他处理器上的不同地方,更详细的介绍读者可以参考《嵌入式实时操作系统uC/OS-II》这本书。
资源详情
资源评论
资源推荐
1 VC 下时钟的获得
《嵌入式实时操作系统 uC/OS-II》这本书已经安排了大量篇幅来专门讲解 uC/OS-II 的移植:
第 13 章移植 uC/OS-II,第 14 章 uC/OS-II 在 80x86 上的移植,第 15 章 uC/OS-II 在带有硬件浮
点运算单元的 80x86 上的移植。所以本文只是重点讲解移植到 VC 下和其他处理器上的不同地
方,更详细的介绍读者可以参考《嵌入式实时操作系统 uC/OS-II》这本书。和所有其他的移植
一样,本文所做的移植也只需要修改 uC/OS-II 处理器相关代码,一共包括 3 个 文 件 :
OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C。考虑到 VC 可以嵌入汇编代码,并不需要专门
的汇编代码文件,所以 OS_CPU_A.ASM 是多余的,最终只有 OS_CPU.H 和 OS_CPU_C.C 两个
文件。所以这两个文件成了移植的关键,首先要解决的问题就是时钟“滴答”的获得。
移植到 BC 下的 uC/OS-II 是通过修改 DOS 下的硬件时钟中断来得到时钟滴答的,VC 下时
钟滴答从哪里来呢?这是移植 uC/OS-II 到 VC 下第一个要考虑的问题。在 windows 的保护模式
下不能像 DOS 下面那么容易,直接通过一个函数调用就能够修改中断。 windows 下要修改中
断涉及到驱动程序,这样就加大了移植的困难度与复杂度,但好处是只有真正硬件时钟的“滴
答”才能够保证 uC/OS-II 的实时性。另外一种解决方法是采用 windows 下的软件定时器,通过
定时器来产生模拟时钟“滴答”。考虑到本移植只是为了教学和学习,并没有应用到对实时性要
求高的产品,所以最终决定采用软件定时器来模拟时钟中断。Windows 下软件定时器种类很多,
下面分别简要介绍一下这些定时器:
1.SetTimer()函数
有 windows 下编程经验的最先想到的应该是 SetTimer 这个 API 函数,但本文采用的移植程
序 是 基 于 控 制 台 的 , 也 就 是 说 最 开 始 建 立 VC 工 程 的 时 候 选 择 的 是 创 建 win32 console
application,控制台下的程序是没有消息循环的,所以要使用 SetTimer 函数则必须再创建一个
线程来专门处理消息循环,这样一来事情就复杂了,而且这个函数定时精度非常不高。所以这
种方法不是特别合适。
2.timeSetEvent()函数
这个函数很简单,不需要消息循环,定时精度为 ms 级,主要应用在多媒体定时方面,能
够在非常精确的时间间隔内完成一个事件、函数或过程的调用。函数原型:MMRESULT
timeSetEvent ( UINT uDelay, UINT uResolution , LPTIMECALLBACK lpTimeProc , WORD
dwUser,UINT fuEvent ),可以通过调用 timeSetEvent()函数,将需要周期性执行的任务定义
在 LpTimeProc 回调函数中,从而完成所需处理的事件。调用这个函数后会增加一个线程,时
间一到则在这个线程中调用回调函数,对于主线程来说,非常类似外部中断调用,我们需要的
正是这样的效果,所以本文最终选择这个函数来产生时钟“滴答”。
3.QueryPerformanceFrequency()和 QueryPerformanceCounter()函数
这两个函数可以实现更高精度的定时, 误差不超过 1 微秒,进行定时之前,先调用
QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率, 然后在需要严格定时的事
件发生之前和发生之后分别调用 QueryPerformanceCounter()函数,利用两次获得的计数之差及
时钟频率,计算出事件经 历的精确时间。可见,这两个函数主要是应用在计算时间方面,并
没有设置回调函数机制,如果我们要使用这个函数的话,则需要首先创建一个线程,然后在这
个线程中计算时间调用我们要定时处理的函数,等于需要手动实现定时函数回调机制,远比
timeSetEvent()函数来得复杂。
当然还有更多的定时器函数,这里不一一介绍,读者可以自行参考相关书籍。本文选择的
是 timeSetEvent 函数,调用这个函数后 uC/OS-II 就已经开始它的脉搏了。
2 模拟时钟中断的产生
中断指的是中止当前的事务,处理别的更要紧的事情。我们通过软件定时器来模拟产生
uC/OS-II 的时钟中断,但 timeSetEvent()函数调用定时回调函数是和主线程同时被 windows 操
lyfezh
- 粉丝: 1
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- ExcelVBA中的Range和Cells用法说明.pdf
- 基于单片机的电梯控制模型设计.doc
- 主成分分析和因子分析.pptx
- 共享笔记服务系统论文.doc
- 基于数据治理体系的数据中台实践分享.pptx
- 变压器的铭牌和额定值.pptx
- 计算机网络课程设计报告--用winsock设计Ping应用程序.doc
- 高电压技术课件:第03章 液体和固体介质的电气特性.pdf
- Oracle商务智能精华介绍.pptx
- 基于单片机的输液滴速控制系统设计文档.doc
- dw考试题 5套.pdf
- 学生档案管理系统详细设计说明书.doc
- 操作系统PPT课件.pptx
- 智慧路边停车管理系统方案.pptx
- 【企业内控系列】企业内部控制之人力资源管理控制(17页).doc
- 温度传感器分类与特点.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0