来论坛有些天了,看了论坛的各个板块,发现这个板块适合自己,很喜欢CortexM系列,一点经验活跃一下
看了很多ucosii移植STM32的教程,见过写的很好的,也见过无厘头的,在这希望写个相对有引导性的教程,
也希望能借此机会品尝一下ST的新作STM32F429
两个月前公司决定革新一些dsp产品改用stm32,也就是cost down。接触CortexM3体会最深的就是其相对统一的结构,带来的可移植性。很多人都听说过RTOS,听说过移植,但都止于听说。学习更需要实践。
学习UcosII和STM32需要两个基本的知识储备
1. 嵌入式实时操作系统uCOS-II(邵贝贝):http://pan.baidu.com/s/1c0jBbeo
2. CortexM3权威指南:http://pan.baidu.com/s/1c0jBbd2
注:英文阅读能力强的建议阅读英文版
学习完UcosII对她的印象可能只是书本上的那些片段,需要有个具象的理解,上官网下载源代码http://micrium.com/(需注册才可下载)
注意:下载到的代码是在IAR编译环境下的
解压之后会有三个文件
1. AppNotes:官方的应用手册
在AppNotes文件夹下有个MicriumAppNotesAN1xxx-RTOS AN1018-uCOS-II-Cortex-M3AN-1018.pdf此文件是官方移植ucosII到ARM Cortex-M3的内核代码需要修改的详细说明。
2. Licensing:UcosII的使用许可证
3. Software:源程序文件
这里用到的是uCOS-II文件夹。在整个移植过程中只需用到uCOS-II下的两个文件,Ports和Source.
等移植完成后,回过头来思考一下CPU、uC-CPU、uC-LIB这三个文件是干什么的?
下面是开发板与uC/OS-II的框架图:
UcosII的结构及其与硬件的关系
关于上方框图和各个.C文件的说明可参阅官方《嵌入式实时操作系统Ucos-III》的第二章。
下图为KEIL工程文件目录:
首先研读AppNotes文件夹下的MicriumAppNotesAN1xxx-RTOS
AN1018-uCOS-II-Cortex-M3AN-1018.pdf。一遍不懂读两遍两遍不懂读三遍。Micrium公司的文化决定的她的资料是难以超越的。
两个重要的概念
钩子函数:AN-1018.pdf中有说明。
PendSV进行上下文切换:原理参考《Cortex-M3 权威指南》7. 6 SVC和PendSVendSV的典型应用即是进行上下文切换,举个栗子:systick产生定时中断我们把它的中断处理函数
改成
OSIntEnter();进行简单的计数
OSTimeTick();//遍历所有任务的延时状态,并进行减一操作并判断是否为挂起任务
OSIntExit();触发一个pendsv中断,在pendsv中断处理函数中进行任务切换
SysTick是系统的心跳,任务的延时,切换都需要它的参与。在此我们注销掉ucosii关于SysTick的函数和宏定义,改用st提供的函数;
1. 打开os_cpu.h注销掉这些函数
2. 注销掉相应函数在os_cpu_c.h中函数的定义
3. 注销os_cpu_c.h中关于SysTick的宏
4. 参考《STM32固件库中文参考手册》在你的BSP.C中书写你的SysTick_init();
注:尝试自己书写,实在困难在下载别人的程序参考或发帖提问
如果你用的是IAR编译器,这部分忽略;如果你和我一样使用KEIL,那就要稍作修改,以实验编译环境的不同。
1、 os_cpu_a.asm
将PUBIC改为EXPORT,修改完成如下图
关于这些修改有兴趣可参阅RealView 编译工具4.0版《汇编器指南》
2、 修改段,修改完成如下图
3、 修改os_dbg.c,修改完成如下图
附件为本文PDF
|