μCOS-II在80196KC单片机上的移植.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COS-II 在 80196KC单片机上的移植 摘要主要讨论了将 μ-实时操作系统在 和方法,给出了一个以为编译器、以 8019 进行移植的具体实例。  8019 单片机上进行移植的原理为处理器,对 μ-实时操作系统 关键词 80196; -;;移植Intel的80196KC系列单片机在中国国内有很大一批用户。 支持80196KC的C编译器生产厂商主要有Tasking和 IAR。 但国内使用Tasking公司C编译器的用户较多。 由于 μC/OS-Ⅱ系统为源码公开的实时操作系统,因此是当前嵌入式系统开发的主要方法。 但是,在 μC/OS-Ⅱ网站上没有现成的移植实例。 因此,有必要进行一次移植以使操作系统成为 μC/OS-Ⅱ,这种移植采用的处理器为80196KC,而其编译器为Taskingc196。 1 μC/OS-Ⅱ的工作原理 μC/OS-Ⅱ是一个源码公开的实时多 任务操作系统,其工作流程如图1所示。 图中,任务切换的核心是利用出栈指令将各个任务的工作现场再现, 并利用子程序返回指令改变PC指针以完成任务的切换。 移植的关键是如何构造任务堆栈及任务切换时的出栈顺序。 任务区堆栈初始化主要是模拟任务被中断后的堆栈内容。 范文先生网收集整理2 80196KC的工作状态80196KC是Intel公司的16位单片机,和程序运行密切相关的寄存器有指令计数器PC、堆栈指针 sp、程序状态寄存器PSW、中断屏蔽寄存器INTMASK和INTMASK1以及窗口寄存器WSR以下将程序状态寄存器PSW、中断屏 蔽寄存器INTMASK和INTMASK1、窗口寄存器WSR统称为程序状态字。 它们可在执行子程序调用call指令时自动将pc进栈,并在子程 序返回调用RET指令时自动将pc出栈。 由于80196KC有16位的寻址能力,故这一动作有2个字节进出栈,其中pusha指令将程序状态字进栈,popa指令将程序状态字出栈。 这一动作共有4个字节进出栈。 另外pusha动作会将PSW中的中断允许位清零,故通常用pusha关闭中断,而用popa恢复中断允许。 由于80196KC的时钟节拍是特定的周期性中断,当每个时钟节拍到来时,系统将对任务延时做一次裁决。 因此,在这个时钟节拍可采用80196KC中的软件定时器中断。 3 Taskingc编译器的工作细节带参数的函数调用编译后的主 要操作是先将参数进栈,然后执行call指令。 在函数入口处将堆栈中的参数倒入寄存器tmp0、tmp2、tm p4和tmp6以进行操作以下称临时寄存器的原因主要是,堆栈一般位于RAM区,而对RAM区操作不如对寄存器操作快。 如果该函数有局部变量,局部变量也是分配在堆栈中。 Taskingc编译器一般用一寄存器frame01以下称框架寄存器对局部变量进行访问,在函数返回时执行ret操作,并对SP指针进行调整,以跳过函数参数在堆栈中的位置。 中断调用和函数调用类似,中断本身虽没有参数,但进中断后要对临时寄存器进行保护。 因此,应在进中断后执行pusha操作,并在中断返回时使临时寄存器出栈注意出栈顺序,然后再次执行popa和ret操作。 图2所示为堆栈区的一般结构。 4 移植的细节在OSTaskStkInit中,任务堆栈区的构造特点是80196KC的堆栈区由高向低增长,最高处是任务的入口参数,接着是PC指针和程序状态字。 如前所述,任务切换时要对临时寄存器和框架寄存器进行保护。 明确了任务堆栈的构造后,编写任务启动函数指OSStaart函数和任务切换函数指OS_TAASK_SW和OSIntCtxSw 函数的关键是,在得到了最高优先级的任务堆栈指针后,如何按正确的顺 序出栈,直到PC指针。 其中OS_TASK_SW,函数在切换任务之前还要编写对当前任务的现场进行保护的程序,而OSIntCtxSw,不用,因为中断函 数用C写成,而OSIntCtxSw,是在中断中调用的,因此,TaskingC编译器在进中断时已自动对其保护。 同时还应注意,由于在中断服务程序中没有定义局部变量,这使得TaskingC编译器不能对框架寄存器进行保护,因此,对这一寄存器的保护应在设计时自己加上。 #pragmainterruptOSTickISR=OST ICKISRVECTOR voidOSTickISRvoid {asmpush ?frame 01 ;OSIntNesting++ ;hsocommand=0x19 ; ADTimerCount+=5000 ;hsotime=ADTim erCount ;OSTimeTick ;OSIntExit ;asmpo p frame01 ;}还应注意,在其它中断服务程序中,如果没有定义 局部变量,也应加上对框架寄存器的保护。 如果有局部变量,编译器会自动对框架寄

文档评论(0)

183****6506 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档