一、准备好UCOSIII的源码3 c2 G1 x/ {. G% ]* a* R ①进入官方网站后点击,找到Browse by MCU Manufacturer下对应的STM这一栏,选择对应的型号0 t1 F$ M# r( |- W 4 ?' E- Q! v. n8 ] + K- ]1 j' h8 A6 f- Z 这里点击STN32F4xx进去选择自己需要的下载即可 ②提供一份我已经下载好的UCOSIII源码 二、UCOSIII移植! Y v1 P- M7 }% N2 V* a ①准备好需要移植的工程 在工程文件夹里新建一个UCOIII文件夹,然后将UCOSIII源码里的uC_CPU、uC_LIB、UCOS_III文件复制到新建的这个文件夹中。/ U# \9 w( u0 a" I1 G/ ^( A+ X 7 t' T% N! K+ x& o 还需要在UCOSIII文件夹中再新建两个文件夹:UCOSIII_BSP,UCOSIII_CONFIG,上图所示,已经建好了。 ②向UCOSIII_CONFIG添加文件2 T8 i0 Z+ D3 [3 u; ? 路径是:UCOSIII 3.04\Micrium\Software\EvalBoards\ST\STM32F429II-SK\uCOS-III,添加的文件如图所示: : ?6 `: c# i0 q5 B0 e ③向UCOSIII_BSP添加文件 路径是:UCOSIII 3.04\Micrium\Software\EvalBoards\ST\STM32F429II-SK\BSP * ]3 S1 V* F% I; J1 C7 ^6 W + F5 j4 P1 s! f- r5 Y" N6 @ ④打开工程文件,向工程中添加分组,需要添加的分组文件夹如下8 \7 y3 d3 I# [: Q8 h. g$ O# ^; n. s- { / D w; i7 X; f ⑤文件夹添加好后,再向各文件夹添加源文件! l Q( y7 T$ U/ l 1、BSP添加路径:UCOSIII\UCOS_BSP里的bsp.c添加进去,添加后如下图所示:/ w( i Q6 E; M4 S! x , z4 T B3 G! `$ s: ?$ x 2、CPU添加路径:UCOSIII\UCOS_CPU里的cpu_core.c添加进去,并继续进入目录ARM-Cortex-M4\RealView选择cpu_a.sam\cpu_c.c两个文件,添加后如下图所示: - `2 L- ~3 ~8 i" v0 v) F" P: t 3、LIB添加路径UCOS-III-LED\UCOSIII\uC-LIB里的 ! V P$ D& c# s) D 4 ^# `: V6 U7 R+ Y6 h0 J! S2 W 4、CORE添加路径:UCOS-III-LED\UCOSIII\uCOS-III\Source,添加所有文件,添加后如下图所示: 3 J9 u& l1 w& C0 D3 S! L1 Y2 { 5、PORT添加路径:UCOS-III-LED\UCOSIII\uCOS-III\Ports\ARM-Cortex-M4\Generic\RealView,选择All file,添加所有文件,添加后如下图所示: 4 N! o6 i |, [9 R % f5 [/ K( Y* d) _ 6、CONFIG添加路径:UCOS-III-LED\UCOSIII\UCOS_CONFIG选择All file,添加所有文件0 k- l. a$ d* B, V: n8 M - z+ Z( y# E0 X0 s5 P5 V; ~1 } ) z! ~: L% Z; c- n) q 注意,此时部分文件会带有一把钥匙,代表不能修改,修改方法:返回工程文件,右键点击UCOSIII文件,选择属性,把只读去掉即可进入工程中对其修改 ' @# I! ]& [" s- u ⑥添加相关头文件路径& Y [# H9 h; R3 A$ V* @ 8 ] l/ H6 i! M7 z P4 u/ C' ^& h+ x6 [ ⑦修改bsp.c和bsp.h文件,这里直接下载已经修改好的文件 ⑧修改os_cpu_a.asm汇编文件,这里直接下载已经修改好的文件) e/ d' L1 n5 \2 T! m, M ⑨修改os_cpu_c.c文件,这个主要是修改堆栈函数,这里直接下载已经修改好的文件0 r. Y5 j; c; x: @# z, } ⑩修改os_cfg_app.h文件,系统裁剪和内核有关的,这里直接下载已经修改好的文件+ V1 f3 I1 ]2 J5 P: M5 k2 J , G8 Z. A; ]& Q* d0 m1 l" d 此时编译一下,会出现以下问题 1、PendSV_Handler是做上下文切换的,重复定义,而STM32F4xx_it.c只是给的一个框架,屏蔽掉即可& V) `6 B1 V# y; g8 u k7 ^3 t( J " C- J5 I0 l9 K8 _& X6 y" I6 [ 2、搜索到是os_cpu_c.c里面的堆栈函数,由于在汇编文件已经定义,所以这里屏蔽掉即可% O* q8 W8 |: }7 ^3 g5 `! m5 q8 `+ w 十一、修改sys.h 这里要使用支持UCOSIII的SYSTEM文件夹 编译后出现的问题: 中断服务函数重复定义,同样,STM32F4xx_it.c里的屏蔽掉即可3 X6 `. K' |8 i: e4 x E9 U. ^! y + P" S+ C, _# i3 w* Q 9 k* p9 g! y0 |2 a; q, b 十二、最后在主函数创建任务进行测试# p D# A7 Y H$ d- a+ n 注意在os_cpu_c.c中添加#include "includes.h" //添加头文件+ k! }1 u `8 { ) u1 d, v; \& f8 f" _* h% M6 {% d (1)、创建一个start_task任务,Start任务用来创建其他任务。0 h' `% N" K+ [4 E (2)、创建一个led0_task任务,用来控制LED0的亮灭。 4 F* J# K# f, z* X3 s9 w/ T( U (3)、创建一个led1_task任务,用来控制LED1的亮灭。 (4)、创建一个float_task任务,用来测试浮点计算。5 O, o8 ~: d& _8 Q( ^0 e7 ] 如何移植不同版本的UCOS系统? ^' G4 |6 j, g5 Q# `0 k5 z B o8 ^( _$ Y$ { 只需要将源码的UCOSIII\uCOS-III下的Source文件夹,直接替换掉移植好后的Source,比如我把3.03版本的Source文件夹复制替换掉移植好工程里的UCOSIII\uCOS-III下的Source文件夹编译即可,这样就将原来的版本替换成3.03的版本了。 / @) e7 x `% l, X & ?1 R! g+ \1 Z3 Y 5 Y4 w! x3 Y' ~' d7 k) n |
STM32固件库分享,超全系列整理
【中文文档】AN3965_STM32F40x和STM32F41x基于串口的IAP
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32F4中文用户手册
基于STM32F407的FreeRTOS阶段性的总结(13)
STM32F400、STM32F402 Cortex-M4超值单片机
基于STM32F407的FreeRTOS获取各任务运行时间及占用情况(4)
基于STM32F407的FreeRTOS任务的挂起与恢复(3)
基于STM32F407的FreeRTOS任务的创建与删除经验分享(2)
基于STM32F407的FreeRTOS环境搭建经验分享(1)