STM32-uCOS移植STM32-uCOS移植.pdf

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

uCOS 学习随笔 StepbyStep-2 Project: fira-mirosot-robot uCOS 学习随笔 StepbyStep-2 —— 理解中断(基于 STM32 控制的第四代圆梦小车) 一、缘由 这一步本来计划结合需求搭建任务框架,完成概要设计的,之后再根据任务框架将任务 逐一实施。 可在第一步时就对系统的时基的形成存在疑惑,对 uCOSII 是如何实现定时的没有吃透, 丝毫没有发现系统去使用 STM32 的定时器,也没有看到相应的中断处理,倒是发现:如果 使用系统的延时函数,精度很难达到要求。 因为小车需要产生PWM 信号,虽说周期不算短,有 8ms 呢(125Hz) ,可如果将系统的 Tick 设置为 10ms,指望直接使用系统地定时不太可能了,必须另谋出路。 而且,必须和 PWM 同步的电流、电压采样似乎也必须有较高的实时性。 检测车轮转动的码盘信号最快约为 200 Hz, 周期约5ms, 也必须靠中断采集。 因此,要能恰当的搭建任务框架,必须很好的了解 uCOSII 的中断实现机制,以及中断 后任务是如何切换的。这样才能合理分配资源,以保证小车的控制遂心如愿。 所以,将第二步改为“理解中断” ,主要探讨系统中是如何实现定时的?是如何实现中断 的?自己如何编写一个中断服务程序?中断处理中的信息如何与任务交互?如何通过中断激 活相应的任务? 基本掌握了这些,分配任务才能做到心中有底。 二、理解系统定时 通过仔细阅读源码,基本理解了系统定时是如何实现的了。 uCOSII 只使用了STM32 的 SysTick ,这部分没有使用ST 的库,而且硬件上似乎系统只 第 1 页 共 13 页 uCOS 学习随笔 StepbyStep-2 Project: fira-mirosot-robot 使用了 SysTick 。 SysTick 的初始化及中断部分由 uCOSII 系统部分完成,准确地说是 STM32 移植部分。 详细工作过程如下: 1) 在app.c 的App_TaskStart 中调用: OS_CPU_SysTickInit() 此函数在 COMMON\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView\os_cpu_c.c 中定 义,主要完成 SysTick 的中断初始化。(从目录上看就知道属于移植部分) 2)在中断向量定义 Vectors.s 中定义了: IMPORT OS_CPU_SysTickHandler 以及: DCD OS_CPU_SysTickHandler ; 15, uC/OS-II Tick ISR Handler 将中断向量 15 定位于 SysTick 的中断服务程序。 3)在 COMMON\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView\os_cpu_c.c 中定义: 这就是SysTick 的中断处理程序。其中调用了 OSTimeTick ,处理系统的时基。 4)OSTimeTick 在 COMMON\uCOS-II\Source\os_core.c 中定义: 第 2 页 共 13 页 uCOS 学习随笔 StepbyStep-2 Project: fira-mirosot-robot 在这个函数中主要处理了处于等待状态任务(Waiting)的等待计时,也就是调用了以下 两个延时函数之一的任务: void OSTimeDly (INT16U ticks) (在 OS_Time.c 中定义) INT8U O

文档评论(0)

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

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

1亿VIP精品文档

相关文档