STM32-uCOS移植

STM32-uCOS移植

ID:37640139

大小:1015.29 KB

页数:13页

时间:2019-05-27

STM32-uCOS移植_第1页
STM32-uCOS移植_第2页
STM32-uCOS移植_第3页
STM32-uCOS移植_第4页
STM32-uCOS移植_第5页
资源描述:

《STM32-uCOS移植》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、uCOS学习随笔StepbyStep-2Project:fira-mirosot-robotuCOS学习随笔StepbyStep-2——理解中断(基于STM32控制的第四代圆梦小车)一、缘由这一步本来计划结合需求搭建任务框架,完成概要设计的,之后再根据任务框架将任务逐一实施。可在第一步时就对系统的时基的形成存在疑惑,对uCOSII是如何实现定时的没有吃透,丝毫没有发现系统去使用STM32的定时器,也没有看到相应的中断处理,倒是发现:如果使用系统的延时函数,精度很难达到要求。因为小车需要产生PWM信号,虽说周期不算短,有8ms呢(125Hz),可如果将系统的Tick设置为10m

2、s,指望直接使用系统地定时不太可能了,必须另谋出路。而且,必须和PWM同步的电流、电压采样似乎也必须有较高的实时性。检测车轮转动的码盘信号最快约为200Hz,周期约5ms,也必须靠中断采集。因此,要能恰当的搭建任务框架,必须很好的了解uCOSII的中断实现机制,以及中断后任务是如何切换的。这样才能合理分配资源,以保证小车的控制遂心如愿。所以,将第二步改为“理解中断”,主要探讨系统中是如何实现定时的?是如何实现中断的?自己如何编写一个中断服务程序?中断处理中的信息如何与任务交互?如何通过中断激活相应的任务?基本掌握了这些,分配任务才能做到心中有底。二、理解系统定时通过仔细阅读源

3、码,基本理解了系统定时是如何实现的了。uCOSII只使用了STM32的SysTick,这部分没有使用ST的库,而且硬件上似乎系统只第1页共13页uCOS学习随笔StepbyStep-2Project:fira-mirosot-robot使用了SysTick。SysTick的初始化及中断部分由uCOSII系统部分完成,准确地说是STM32移植部分。详细工作过程如下:1)在app.c的App_TaskStart中调用:OS_CPU_SysTickInit()此函数在COMMONuCOS-IIPortsARM-Cortex-M3GenericRealViewos_cpu

4、_c.c中定义,主要完成SysTick的中断初始化。(从目录上看就知道属于移植部分)2)在中断向量定义Vectors.s中定义了:IMPORTOS_CPU_SysTickHandler以及:DCDOS_CPU_SysTickHandler;15,uC/OS-IITickISRHandler将中断向量15定位于SysTick的中断服务程序。3)在COMMONuCOS-IIPortsARM-Cortex-M3GenericRealViewos_cpu_c.c中定义:这就是SysTick的中断处理程序。其中调用了OSTimeTick,处理系统的时基。4)OSTimeTi

5、ck在COMMONuCOS-IISourceos_core.c中定义:第2页共13页uCOS学习随笔StepbyStep-2Project:fira-mirosot-robot在这个函数中主要处理了处于等待状态任务(Waiting)的等待计时,也就是调用了以下两个延时函数之一的任务:voidOSTimeDly(INT16Uticks)(在OS_Time.c中定义)INT8UOSTimeDlyHMSM(INT8Uhours,INT8Uminutes,INT8Useconds,INT16Ums)在调用延时函数后,任务被置于等待状态(Waiting),并在任务控制块中设置等待

6、的时间,也就是对Tick的计数值,存放于:ptcb->OSTCBDly。在OSTimeTick中会对ptcb->OSTCBDly进行减计数,如果减到“0”,则将任务切换为就绪状态(Ready),下次任务调度时就可以被激活了,转换为运行状态(Running),对于调用延时的任务而言,意味着延时结束。注意:这个切换要到任务调度时才会实现,而不是立刻生效。而即使进入了任务调度,也不一定能轮到,如果有高优先级的任务在Running,或者同时进入Ready,则需要先处理它们。由此可见延时函数的精度不能指望。OSTimeTick似乎还做了一件事:单步调试的控制,此单步非一般仿真下的一条条

7、指令执行,而是一个Tick、一个Tick的执行,对于调试多任务似乎更合理,不过这也是我的理解,没有做过,不知道是否如此。OSTimeTick还有一个与应用程序相关的功能:系统运行计时,存放在OSTime中,这个值似乎在任务启动后就一直对Tick计数。此外,如需要定义一个与Tick同步的任务,OSTimeTick中提供了一个Hook函数接口:OSTimeTickHook();(在os_cpu_c.c中定义)这个函数为uCOSII的Timer提供计数信号,为满足应用程序需要,函数中留了一个应用接口:App_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。