你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】UCOSIII在STM32F4xx上的移植

[复制链接]
STMCU小助手 发布时间:2022-5-18 22:00
一、准备好UCOSIII的源码0 s0 j, g, R8 j# a
    ①进入官方网站后点击,找到Browse by MCU Manufacturer下对应的STM这一栏,选择对应的型号( S% Z2 Q$ d8 P. x+ o7 b9 Y

3 p0 D# i+ o" M5 x 1YVP6Z{WS$E1Z]B_AEM`0]I.png ! [) c+ c) m3 Z8 U5 W. j9 A
+ k) D7 x8 q( L# O; G5 i( _: x
这里点击STN32F4xx进去选择自己需要的下载即可( N+ Y: g! |) Y- l. a+ N# O4 {

# ~; h) G) j' g# [. a! \1 | @$Q%GI)KGK12)}XWB3(6XZ6.png 8 Y$ W( A4 [3 V6 O# C( p1 o

: d) {* _% c  n6 D GVIHS$KSVGL%GSECE[_H@[D.png / Y% H: g/ I, D0 q+ U

! |) `3 e5 b7 P5 c3 A2 a    ②提供一份我已经下载好的UCOSIII源码
7 d$ V& v* l/ }+ e
5 R( {. e( ]: b& Y' z+ j二、UCOSIII移植6 x. m* J( o  E& i5 T8 M( d% d' |. Y
    ①准备好需要移植的工程: k6 C; z! b8 u/ U
在工程文件夹里新建一个UCOIII文件夹,然后将UCOSIII源码里的uC_CPU、uC_LIB、UCOS_III文件复制到新建的这个文件夹中。
6 m/ Y' r! N8 c1 o  g" e8 Z! p8 `7 b5 Q0 h3 D" Q
KBW)F%VNP0X2D{S[H[@$`FX.png `0H1J]6[[TG_KQR3S0AZHBO.png / C* \- W. u9 O) S* b7 f  A
, P4 o6 O4 |( [+ o8 `: ?* l
还需要在UCOSIII文件夹中再新建两个文件夹:UCOSIII_BSP,UCOSIII_CONFIG,上图所示,已经建好了。" `' ~# n6 P$ n6 B

+ [2 q$ ?+ n2 R; f②向UCOSIII_CONFIG添加文件& x+ S6 i5 m! ]" J2 C9 t
路径是:UCOSIII 3.04\Micrium\Software\EvalBoards\ST\STM32F429II-SK\uCOS-III,添加的文件如图所示:
7 ^5 W1 u2 J8 C! `+ F# E
; s8 ]% i3 P) m$ u5 P5 p, J. K4 f 64BGN2V61PW8~F}%A@TJ`JU.png
+ d. {( W: b' R7 V% ]4 h
6 Q+ V. d2 l  C3 `+ E- {③向UCOSIII_BSP添加文件. h5 F: p  V' e3 b8 L' \
路径是:UCOSIII 3.04\Micrium\Software\EvalBoards\ST\STM32F429II-SK\BSP
9 \2 n3 c. M9 g5 X5 U
2 n6 Y& H# |0 F! a$ Q5 k5 x [KXP840DFH[B)RL]`7Z7V05.png
, U; i# f$ _5 Y. D* \
$ E! c3 F4 W: r9 x+ `④打开工程文件,向工程中添加分组,需要添加的分组文件夹如下" }4 D% X1 H- r) E1 C6 S" E, \. E
+ c/ f0 L- W2 n
KZ[PN[BP)}UK]6$S`7}199T.png `GIT(@4BY$]}B40GP%M$YN1.png
/ M, x$ `( O# f5 d' U7 p# @3 }( B% ^+ {5 r& p: `$ B
⑤文件夹添加好后,再向各文件夹添加源文件

% e7 A( g6 K$ B( t1、BSP添加路径:UCOSIII\UCOS_BSP里的bsp.c添加进去,添加后如下图所示:8 O) L3 x2 n/ x5 \" N4 i

1 j0 _7 H9 f0 C2 S L)IY7J3C}TG{1[M8FJXF@%8.png
9 e$ G# o- I2 m5 c
+ E$ c$ E& w$ n' G$ E/ H9 W) r7 H2、CPU添加路径:UCOSIII\UCOS_CPU里的cpu_core.c添加进去,并继续进入目录ARM-Cortex-M4\RealView选择cpu_a.sam\cpu_c.c两个文件,添加后如下图所示:
% b$ M, O9 E" |) a, ?: l& }; ^5 b8 x. t- I' |8 j" v  |" f
HFT{]513HPC6)[J_XKFBLXU.png . g) m) D+ t+ R5 T: O7 R3 Y

" j0 f, `+ a& i" T9 E, y( r3、LIB添加路径UCOS-III-LED\UCOSIII\uC-LIB里的
5 t9 x! t0 E% l
! B. N" s4 D7 H4 G$ H: O$ \ 23I)3M_]MFLV19(85SE1{ZN.png ,继续点击Ports\ARM-Cortex-M4\RealView,选择All file,添加lib_mem_a.asm文件,添加后如下图所示:0 x  D* y7 T! ?3 V. Q
7 q9 p0 P, T$ V! M# ?0 V4 U4 A
7[V9R7US`9J41YNH~$_WR3A.png
6 C! t' _  b: o& k7 k
% m3 C/ z0 _) @* h: D: I$ L4、CORE添加路径:UCOS-III-LED\UCOSIII\uCOS-III\Source,添加所有文件,添加后如下图所示:
) h3 p7 M3 X- b. {2 v+ S- h% ^. b8 U+ K# U$ E" A' t
_THC_PX[Y]6K8P{AF@5{T.png
; r! P' j! s( C/ X2 x8 o! G
: q3 x3 i, @! l/ S5、PORT添加路径:UCOS-III-LED\UCOSIII\uCOS-III\Ports\ARM-Cortex-M4\Generic\RealView,选择All file,添加所有文件,添加后如下图所示:( Y0 S7 L- y$ q" r# n

0 |. [( u7 C1 R7 Z* B- e6 e; v B$J`JK%CX9@T4O`HU4EG4VF.png
( a. E9 n- Q4 O& i0 Q, [3 S- E+ h& Q1 i, ]& n$ z2 @( Q3 h
6、CONFIG添加路径:UCOS-III-LED\UCOSIII\UCOS_CONFIG选择All file,添加所有文件/ s( `4 D4 X3 C1 Q5 S7 L8 ^

, F$ Z2 r. n3 k XZTTIKQMC1L}T@HUWD021YB.png ' |3 x6 E2 ?- [3 R& C% Z) o6 n" T

& J. J- ]7 d" T+ `7 K' b# x注意,此时部分文件会带有一把钥匙,代表不能修改,修改方法:返回工程文件,右键点击UCOSIII文件,选择属性,把只读去掉即可进入工程中对其修改9 j3 _1 e! Z! G- x. u( c6 R
) ?3 I3 C% n9 t5 E+ t, [
⑥添加相关头文件路径
4 q7 [+ V! b, f% `# d* f0 `+ Y/ G9 D
U2N{1ASPHJ)AD[E$YA_22}C.png 9 m/ S: w$ w3 i& O: J* k# L
! b, u( W% l. l4 P7 h$ G& w$ T
⑦修改bsp.c和bsp.h文件,这里直接下载已经修改好的文件
! C. S$ `$ s3 X
5 t( `3 e' d+ W3 U5 C⑧修改os_cpu_a.asm汇编文件,这里直接下载已经修改好的文件
; e0 _3 z9 M! m% x+ A; E$ L1 f- q" L( |: m, _* m8 m7 i; F/ L
⑨修改os_cpu_c.c文件,这个主要是修改堆栈函数,这里直接下载已经修改好的文件, d' _& {2 f: W
/ x. b" I. D2 `& z* h( ?: j
⑩修改os_cfg_app.h文件,系统裁剪和内核有关的,这里直接下载已经修改好的文件+ k: v# K0 D( |: U% c( d
) e2 H) P9 S; W% A9 u
+ d4 c. K. V. m7 B
此时编译一下,会出现以下问题' i5 A9 M% Y6 o* L9 x$ c, Z
1、PendSV_Handler是做上下文切换的,重复定义,而STM32F4xx_it.c只是给的一个框架,屏蔽掉即可
# ?; x3 F2 _- A. Z EQ2MHA91@YK`[3%{KK41I2M.png
! L, }. O% q1 ^5 C/ a9 W; ^7 m- ?7 r6 c& z# A/ A# J3 f
2、搜索到是os_cpu_c.c里面的堆栈函数,由于在汇编文件已经定义,所以这里屏蔽掉即可& w* A0 S* F% R  I, C( a1 |

- k/ O5 V2 X) P) B  x 7$VAE67YYI}KPCB3H%(]1ME.png
. l. S- `1 l' }% Y  r
7 t$ N# L7 P2 \/ i2 g! s* |7 w, h, |& B十一、修改sys.h# ?$ W7 B6 |  f1 Q1 W/ Y# y9 l. X
这里要使用支持UCOSIII的SYSTEM文件夹/ O  Y' `! Q; ~+ ?# _9 b4 f# w8 K0 O

/ ^1 \& c. \) r7 D, ?( N 6CT`L}{072DX0~71NE9_]O7.png
9 D, r4 m! Q, e' r* r- H$ r1 R) X
编译后出现的问题: 中断服务函数重复定义,同样,STM32F4xx_it.c里的屏蔽掉即可! I% N6 p" F" A
1 {" r# t- e5 v% L, ^1 i7 L+ A1 T" c
{R_K)YD1Q}3(HN)`IM}TJTS.png
$ d+ R) L; k  V6 g) G7 P+ B5 G
十二、最后在主函数创建任务进行测试5 a7 }) |/ g5 Q' f' z- @% ^+ A2 t
注意在os_cpu_c.c中添加#include "includes.h"   //添加头文件
% o) A2 I8 u* D" a' p. H
1 R" S4 X( L# K! ^" a" Y  W$ b- p( g(1)、创建一个start_task任务,Start任务用来创建其他任务。. Y- D( ~" Q; z+ k
, r6 F/ D; }) ?
(2)、创建一个led0_task任务,用来控制LED0的亮灭。
# u* ]( k( X+ x  M
' m6 q; X  I* s0 E9 {# D(3)、创建一个led1_task任务,用来控制LED1的亮灭。
, b& j, Z9 E3 q6 n5 }
% i6 u0 f' I6 x(4)、创建一个float_task任务,用来测试浮点计算。
5 ?4 l( `" ?8 X7 V. u/ z+ v  q" c" W; C) I

2 t$ i4 A% @! G如何移植不同版本的UCOS系统?2 C& v( q& L! W) m

; \$ a) ?4 s- @$ |只需要将源码的UCOSIII\uCOS-III下的Source文件夹,直接替换掉移植好后的Source,比如我把3.03版本的Source文件夹复制替换掉移植好工程里的UCOSIII\uCOS-III下的Source文件夹编译即可,这样就将原来的版本替换成3.03的版本了。
: t9 q: N; H8 Y& s/ p4 z( v6 |. l( x. x7 V" H0 ~2 \6 p: @

- n! X2 s. m) e8 S7 E. T3 v# q1 E- [9 c) m% d) R/ X
% U( Y8 ?" \2 \/ \& r. z. C
1 G  z, X7 d* Q6 x0 L' M
7I[K$}3SNOZL%AIE@D$F@PU.png
赞 收藏 评论0 发布时间:2022-5-18 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版