烽火社区

标题: STM32F103之uCOSII移植 [打印本页]

作者: 小白爱搞机    时间: 2014-4-25 10:55 PM
标题: STM32F103之uCOSII移植

来论坛有些天了,看了论坛的各个板块,发现这个板块适合自己,很喜欢CortexM系列,一点经验活跃一下[attach]29902[/attach]


看了很多ucosii移植STM32的教程,见过写的很好的,也见过无厘头的,在这希望写个相对有引导性的教程, 也希望能借此机会品尝一下ST的新作STM32F429

两个月前公司决定革新一些dsp产品改用stm32,也就是cost down。接触CortexM3体会最深的就是其相对统一的结构,带来的可移植性。很多人都听说过RTOS,听说过移植,但都止于听说。学习更需要实践。

 

学习UcosIISTM32需要两个基本的知识储备

1.         嵌入式实时操作系统uCOS-II(邵贝贝):http://pan.baidu.com/s/1c0jBbeo

2.         CortexM3权威指南:http://pan.baidu.com/s/1c0jBbd2

注:英文阅读能力强的建议阅读英文版

一、内核代码

学习完UcosII对她的印象可能只是书本上的那些片段,需要有个具象的理解,上官网下载源代码http://micrium.com/(需注册才可下载)

[attach]29903[/attach]

注意:下载到的代码是在IAR编译环境下的

解压之后会有三个文件

[attach]29904[/attach]

1.       AppNotes:官方的应用手册

AppNotes文件夹下有个MicriumAppNotesAN1xxx-RTOS AN1018-uCOS-II-Cortex-M3AN-1018.pdf此文件是官方移植ucosIIARM Cortex-M3的内核代码需要修改的详细说明。

2.       LicensingUcosII的使用许可证

3.       Software:源程序文件

这里用到的是uCOS-II文件夹。在整个移植过程中只需用到uCOS-II下的两个文件,PortsSource.

[attach]29905[/attach]

等移植完成后,回过头来思考一下CPU、uC-CPU、uC-LIB这三个文件是干什么的?

下面是开发板与uC/OS-II的框架图:

[attach]29906[/attach]

                            UcosII的结构及其与硬件的关系

关于上方框图和各个.C文件的说明可参阅官方《嵌入式实时操作系统Ucos-III》的第二章。

下图为KEIL工程文件目录:

[attach]29907[/attach]

二、内核代码的一些理解

首先研读AppNotes文件夹下的MicriumAppNotesAN1xxx-RTOS AN1018-uCOS-II-Cortex-M3AN-1018.pdf。一遍不懂读两遍两遍不懂读三遍。Micrium公司的文化决定的她的资料是难以超越的。

两个重要的概念

钩子函数:AN-1018.pdf中有说明。

PendSV进行上下文切换:原理参考《Cortex-M3 权威指南》7. 6 SVCPendSVendSV的典型应用即是进行上下文切换,举个栗子:systick产生定时中断我们把它的中断处理函数
改成

[attach]29908[/attach]

OSIntEnter();进行简单的计数

OSTimeTick();//遍历所有任务的延时状态,并进行减一操作并判断是否为挂起任务

OSIntExit();触发一个pendsv中断,在pendsv中断处理函数中进行任务切换

三、SysTick

SysTick是系统的心跳,任务的延时,切换都需要它的参与。在此我们注销掉ucosii关于SysTick的函数和宏定义,改用st提供的函数;

1.       打开os_cpu.h注销掉这些函数

[attach]29909[/attach]

2.       注销掉相应函数在os_cpu_c.h中函数的定义

3.       注销os_cpu_c.h中关于SysTick的宏

[attach]29910[/attach]

4.       参考《STM32固件库中文参考手册》在你的BSP.C中书写你的SysTick_init();

注:尝试自己书写,实在困难在下载别人的程序参考或发帖提问

四、编译器相关处理

                          如果你用的是IAR编译器,这部分忽略;如果你和我一样使用KEIL,那就要稍作修改,以实验编译环境的不同。

1、  os_cpu_a.asm

将PUBIC改为EXPORT,修改完成如下图

[attach]29911[/attach]

关于这些修改有兴趣可参阅RealView 编译工具4.0版《汇编器指南》

2、  修改段,修改完成如下图

[attach]29912[/attach]

3、  修改os_dbg.c,修改完成如下图

[attach]29913[/attach]

 附件为本文PDF



作者: 梦红尘    时间: 2014-4-25 10:59 PM
非常棒,欢迎常来分享
作者: 玻璃茶    时间: 2014-4-25 11:10 PM
大大太给力了[attach]29914[/attach]谢谢大大支持 
作者: 寻觅虚无    时间: 2014-4-26 08:20 AM
支持一个
作者: yulzhu    时间: 2014-4-26 08:25 AM
谢谢分享,顶!!!![attach]29915[/attach]
作者: pc_based    时间: 2014-4-26 08:52 AM
学习一下,谢谢
作者: TonyYU    时间: 2014-4-26 08:54 AM
[attach]29916[/attach]
作者: oneside    时间: 2014-4-26 02:42 PM
不错不错,学习一下
作者: Soul    时间: 2014-4-26 10:01 PM
谢谢支持!
作者: 荔枝小园LEAWISE    时间: 2014-4-26 10:01 PM
[attach]29917[/attach]谢谢捧场!!
作者: gaoxuan123456    时间: 2014-4-26 10:03 PM
谢谢光临,多多指点呀[attach]29918[/attach]
作者: 757371456    时间: 2014-4-26 10:04 PM
[attach]29919[/attach]
作者: soaped    时间: 2014-4-26 10:05 PM
多多交流,第一次发帖,谢谢捧场[attach]29920[/attach]
作者: Skate    时间: 2014-4-27 10:39 AM
顶起。。。[attach]29921[/attach]
作者: ADI中文技术论坛    时间: 2014-4-27 11:47 AM
谢谢支持 [attach]29922[/attach]




欢迎光临 烽火社区 (https://bbs.cnecport.com/) Powered by Discuz! X3.2