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

基于嵌入式操作系统Uco-iDP的_siS.pdfVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《冶金 自动化》2004年增刊 基于嵌入式操作系统Uc/os-ii和DSP的 伺服电机多任务控制 张天水,李正熙,孙德辉 (北方工学大学机电工程学院,北京 100041) [摘 要]主要介绍了嵌人式操作系统uc/os-ii的主要原理,分析了移植uc/os-ii到DSP芯片上所要完成的工作,并对 移植中出现的问题给出了具体的解决方法,并在此基础上实现了伺服电机多任务控制。 关〔健词〕uc/os-ii;实时嵌人式操作系统;移植;DSP 0 概述 工业控制特别是伺服控制系统以及其它运动控制系统中,对系统的响应时间有严格的要求,这些系 统也称实时系统[I],如果系统响应时间超过时限,将会降低系统的性能,甚至导致灾难性的后果。为此, 本文提出基于嵌人式操作系统Uc/os-ii和DSP的伺服电机控制,以嵌人式操作系统做系统的调度,来 满足系统的实时性要求,同时选用高速处理器DSP作为系统的CPU,进一步提高运算速度,减少响应时 间。为此要做两件事,一是将Uc/os-ii移植到DSP上,二是实现多任务的电机控制。 Uc/os-ii是一种免费的且源码公开的嵌人式操作系统,它适合小型控制系统[21,具有执行效率高、 占空间小、实时性优良和可扩展性强等优点。其内核提供任务调度与管理、时间管理、任务间的同步与通 信、中断服务等功能,最小可裁减至2KB, TMS320LF2407是一款专门针对电机控制的芯片,集成了10位的A/D转换及PWM[31,但是单纯 的DSP控制并不能满足电机控制实时要求高的需要,为此,本文提出了将嵌人式操作系统Uc/os-ii移 植到DSP中,从而实现实时控制的需要。移植工作要做源代码级的修改,对几个与CPU密切相关的函 数要重新编写。 1Uc/os一ii的工作原理 Uc/os一ii是一个源码公开的实时多任务操作系统,其工作流程如图1所示。图中,任务切换的核心 是利用出栈指令将各个任务的工作现场再现,并利用子程序返回指令改变PC指针以完成任务的切换。 移植的关键是如何构造任务堆栈及任务切换时的出栈顺序。任务区堆栈初始化主要是模拟任务被中断 后的堆栈内容。 udOS-u调度 任务创建 OSTR众n 血 初始osw 启动多任务 ossuff幻 根据任务优先级数量 最开始创建的任务 创建任务就绪表及任 中启动定时器 图1 uc/os-ii的工作原理图 [收稿日期〕2003-12-02;[修改稿收到日期〕2003-12-31 [作者简介]张天水(1975-),男,山西运城人,助教,硕士,主要从事嵌人式操作系统的研究以及伺服电机控制。 477 《冶金 自动化》2004年增刊 2 具体移植方法 在OSTaskStkInit()中,任务堆栈区的构造特点是DSP2407的堆栈区由高向低增长,最高处是任务 的人口参数,接着是PC指针和程序状态字。如前所述,任务切换时要对临时寄存器和框架寄存器进行 保护。明确了任务堆栈的构造后,编写任务启动函数(指Osstar函数)和任务切换函数(指OS_TASK SW和OSIntxSw函数)的关键是,在得到了最高优先级的任务堆栈指针后,如何按正确的顺序出栈,找到 PC指针。其中OSTASK_SW函数在切换任务之前还要编写对当前任务的现场进行保护的程序,而 OSIntxSw()不用,因为中断函数用C写成,而OSIntxSw是在中断中调用的,因此cc编译器在进中断时 已自动对其保护。同时还应注意,由于在中断服务程序中没有定义局部变量,这使得cc编译器不能对 框架寄存器进行保护,因此,对这一寄存器的保护应在设计时自己加上。 移植要点是: 由于Uc/os

文档评论(0)

精品资料 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档