网站大量收购独家精品文档,联系QQ:2885784924

UCOS-IIVC环境下移植.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UCOS-IIVC环境下移植

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 模拟时钟中断的产生 中断指的是中止当前的事务

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档