uCOS-II的移植要点小谈.doc

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

μC/OS-II移植的要点在哪里?初始化任务堆栈时有两个返回地址是怎么回事?其中一个永远用不到,可以省略吗? 这些问题是移植μC/OS-II的初学者常会遇到的问题,我也是μC/OS-II的初学者,因需要曾两次移植μC/OS-II,能体会遇到这些问题时的茫然,现在基本上明白了移植时遇到的一些问题和一点通用原理,就想把这些东西尽可能用通俗易懂的方式写下来,希望有助于广大初学者学习μC/OS-II。因本人是计算机专业的学生,描述自然也是从计算机的角度进行的,所以可能更适合学计算机的一起参考。既然是初学者,文中错漏肯定不少,请大家多多指正,先谢过啦!^_^ ? 补充: 1.这次的移植是为了做学校的毕业设计,为了避免到时学校有人在网上看到这篇文章还反而说我是抄别人的,请大家如果想转载的话,务必把这段话也一起转过去,我在图片里也加了水印,望理解,谢谢^_^ 2.因为我打算把这篇文章发到多个论坛,所以若有更正我只会在博客那里更正,其他地方请恕不加更正了,博客地址为/speedan/archive/2010/04/05/5451235.aspx。 μC/OS-II的移植要点小谈 μC/OS-II在移植过程中最难理解也是最重要的地方就是任务的“上下文”的处理,这个过程一般是与堆栈的处理相结合的。下边从一般的操作系统开始,逐渐引入μC/OS-II,以说明μC/OS-II对任务的“上下文”的处理过程,再逐个说明μC/OS-II各个需要移植的函数,特别是其中移植时较难理解和需要注意的地方,最后再说明如何让μC/OS-II在MSP430上的移植能支持用C语言编写中断处理函数。 目录 μC/OS-II的移植要点小谈 1 一、引入 1 二、μC/OS-II在移植过程中对任务上下文环境的处理 2 三、μC/OS-II各个需要移植函数的说明 4 (1) Os_cpu_c.c文件中的OSTaskStkInit()函数 4 (2) Os_cpu_a.asm文件中的OSStartHighRdy ()函数: 8 (3) Os_cpu_a.asm文件中的OSCtxSw()函数: 8 (4) 中断服务函数OSTickISR() 8 (5) Os_cpu_a.asm文件中的OSIntCtxSw ()函数 9 四、让μC/OS-II在MSP430上的移植支持用C语言编写中断处理程序 9 一、引入 从微机原理的课程中可以知道,计算机指令是在CPU中执行的,在执行过程中,CPU是通过寄存器存取数据和指令的,因此每个CPU都有一套内部寄存器协助其工作,这套寄存器我们一般称之为“上下文环境”(Context,下边简称为“上下文”),一般包括程序计数器(PC,Program Counter的缩写)、状态寄存器(SR,Status Register)其他一些通用寄存器(General-Purpose Registers),其中PC存放下一条将要执行的指令在代码段的地址,任务切换时把PC的值保存在当前任务的堆栈中,才能在任务切换回来后从这个地址继续执行。 从操作系统的课程中可以知道,多任务OS(操作系统)要求做到每个独立的任务从自己的角度看,都会觉得自己独占CPU,因此每个任务都会有自己的“上下文环境”,一般保存在任务的堆栈中,当该任务运行时,就会从堆栈中弹出来,放入对应的寄存器中。当一个运行中的任务A因为某种原因要切换到其他任务去运行时,A必须保存自己的上下文,以保证以后再次切换回A运行时,能从已保存的上下文中恢复回来。这样当A再次运行时,对A而言上下文根本没有变化过,好像从来没有进行过任务切换一样,其他任务的切换也是这样。这就是多任务切换的一个过程。 μC/OS-II也是一个多任务OS,也得有这样一个任务切换的过程,即也得保存用到的所有寄存器,这样就得直接操纵寄存器。但是μC/OS-II是用C语言写的(为了可移植性等),而C语言是不能直接操纵寄存器的,只有汇编才能直接操纵寄存器。因此,在任务切换过程中必须想办法从C语言中调用汇编语言,以通过汇编来操纵寄存器。但是,不同的编译器对从C语言调用汇编这个方面有不同的规定和实现: 1. 有的编译器是允许直接在C语言中内嵌汇编的,所以可以直接在C语言中内嵌汇编来操纵寄存器; 2. 有的编译器不允许直接在C语言中内嵌汇编,但允许直接从C语言中调用汇编子程序(当然被调用的汇编子程序是放在汇编文件中的)。这样就可以在汇编子程序中操纵寄存器,再在C语言中进行调用; 3. 有的编译器既不允许在C语言中内嵌汇编,也不允许从C语言中调用汇编子程序,但可以实现软中断(即软件中断),所以可以用软中断的方式进入汇编子程序,再在汇编子程序中操纵寄存器。 这就是从C语言调用汇编的一般的三种实现方法。μC/OS-II在不同编译器下也是用这三种方法实现从

文档评论(0)

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

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

1亿VIP精品文档

相关文档