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

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

[复制链接]
STMCU小助手 发布时间:2022-5-18 22:00
一、准备好UCOSIII的源码3 c2 G1 x/ {. G% ]* a* R
    ①进入官方网站后点击,找到Browse by MCU Manufacturer下对应的STM这一栏,选择对应的型号0 t1 F$ M# r( |- W
4 ?' E- Q! v. n8 ]
1YVP6Z{WS$E1Z]B_AEM`0]I.png
% x4 b" Y; E5 K. Y4 m5 ?+ K- ]1 j' h8 A6 f- Z
这里点击STN32F4xx进去选择自己需要的下载即可
2 `6 m" z: u8 R3 Q& ?" B' W
" ?2 R5 t# d" b0 e" b @$Q%GI)KGK12)}XWB3(6XZ6.png
+ L9 c: i* w: N- V) _
+ i1 O) @- S* s GVIHS$KSVGL%GSECE[_H@[D.png
* B* Z; j6 ]. m/ S' c; T
0 c3 m2 k$ t, b& d8 O    ②提供一份我已经下载好的UCOSIII源码
+ h, F  E* M  v( f" X! o
* x# T8 M4 I4 G' i$ ]二、UCOSIII移植! Y  v1 P- M7 }% N2 V* a
    ①准备好需要移植的工程
0 _7 f$ v9 [+ V0 Q6 H在工程文件夹里新建一个UCOIII文件夹,然后将UCOSIII源码里的uC_CPU、uC_LIB、UCOS_III文件复制到新建的这个文件夹中。/ U# \9 w( u0 a" I1 G/ ^( A+ X
7 t' T% N! K+ x& o
KBW)F%VNP0X2D{S[H[@$`FX.png `0H1J]6[[TG_KQR3S0AZHBO.png 2 N! `- Q  |, B

7 `5 c# f" r0 J1 F& K2 `( }9 o还需要在UCOSIII文件夹中再新建两个文件夹:UCOSIII_BSP,UCOSIII_CONFIG,上图所示,已经建好了。
# g/ {# x* d' N, E: Y5 @' x
5 ^3 j2 w' z+ s+ h+ o  B②向UCOSIII_CONFIG添加文件2 T8 i0 Z+ D3 [3 u; ?
路径是:UCOSIII 3.04\Micrium\Software\EvalBoards\ST\STM32F429II-SK\uCOS-III,添加的文件如图所示:
2 U! {9 v/ ^' Z* e- u  @
3 P8 [0 w2 c* V 64BGN2V61PW8~F}%A@TJ`JU.png
% F/ r! J- H. M! D# r# s& a# ?1 U; `: ?6 `: c# i0 q5 B0 e
③向UCOSIII_BSP添加文件
6 O6 I5 ]/ z( I1 |路径是:UCOSIII 3.04\Micrium\Software\EvalBoards\ST\STM32F429II-SK\BSP
2 g! h/ @5 l6 W* D4 t7 Q* ]3 S1 V* F% I; J1 C7 ^6 W
[KXP840DFH[B)RL]`7Z7V05.png ' f) s; E" k2 P* r7 t% J
+ F5 j4 P1 s! f- r5 Y" N6 @
④打开工程文件,向工程中添加分组,需要添加的分组文件夹如下8 \7 y3 d3 I# [: Q8 h. g$ O# ^; n. s- {

, r! M. L5 }  m) a" l7 t KZ[PN[BP)}UK]6$S`7}199T.png `GIT(@4BY$]}B40GP%M$YN1.png - R1 u9 I8 O5 O; r% X
/ 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

' R8 w( Y! @1 Q& J* g4 W) l L)IY7J3C}TG{1[M8FJXF@%8.png " i6 y$ U+ a: E) f0 R: L0 M! O
, z4 T  B3 G! `$ s: ?$ x
2、CPU添加路径:UCOSIII\UCOS_CPU里的cpu_core.c添加进去,并继续进入目录ARM-Cortex-M4\RealView选择cpu_a.sam\cpu_c.c两个文件,添加后如下图所示:
; O2 C5 Z( P9 t5 p& L" `% }1 v- `2 L- ~3 ~8 i" v0 v) F" P: t
HFT{]513HPC6)[J_XKFBLXU.png
6 Q+ S6 G7 `8 w' e8 m3 a, ^: \
+ Q& G1 s& f: k$ x4 e3、LIB添加路径UCOS-III-LED\UCOSIII\uC-LIB里的
% b3 F1 f' {4 u2 P: f" t! V  P$ D& c# s) D
23I)3M_]MFLV19(85SE1{ZN.png ,继续点击Ports\ARM-Cortex-M4\RealView,选择All file,添加lib_mem_a.asm文件,添加后如下图所示:. Z2 `# N+ X5 m% I2 K

4 s& }; k9 i* z' T 7[V9R7US`9J41YNH~$_WR3A.png 7 y$ \. ~& @  C
4 ^# `: V6 U7 R+ Y6 h0 J! S2 W
4、CORE添加路径:UCOS-III-LED\UCOSIII\uCOS-III\Source,添加所有文件,添加后如下图所示:
" i# R- e$ F( x: D3 J9 u& l1 w& C0 D3 S! L1 Y2 {
_THC_PX[Y]6K8P{AF@5{T.png
) F3 f! I/ I8 z( Z0 T
- A0 ~' H6 D1 |! `* [; z5、PORT添加路径:UCOS-III-LED\UCOSIII\uCOS-III\Ports\ARM-Cortex-M4\Generic\RealView,选择All file,添加所有文件,添加后如下图所示:
' E. K. x; o. F8 R% Z4 N! o6 i  |, [9 R
B$J`JK%CX9@T4O`HU4EG4VF.png
$ E# p; U( M& E1 C" R" W% 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 }
XZTTIKQMC1L}T@HUWD021YB.png
1 G, v! V1 M' U3 x# r7 P/ Z) z! ~: L% Z; c- n) q
注意,此时部分文件会带有一把钥匙,代表不能修改,修改方法:返回工程文件,右键点击UCOSIII文件,选择属性,把只读去掉即可进入工程中对其修改
1 ~4 W9 \% z0 A7 e$ h; \0 ~' @# I! ]& [" s- u
⑥添加相关头文件路径& Y  [# H9 h; R3 A$ V* @

: L7 o1 C) E. \1 G5 M/ t5 K U2N{1ASPHJ)AD[E$YA_22}C.png + Z, f' s% c; W. M6 l7 S* |
8 ]  l/ H6 i! M7 z  P4 u/ C' ^& h+ x6 [
⑦修改bsp.c和bsp.h文件,这里直接下载已经修改好的文件
. g7 ^. b( [6 E) }% C; X
) C; O% N) a# \" a, g5 T' o' B⑧修改os_cpu_a.asm汇编文件,这里直接下载已经修改好的文件) e/ d' L1 n5 \2 T! m, M

0 S  |/ Z; j# T2 j8 i2 Y1 i2 d⑨修改os_cpu_c.c文件,这个主要是修改堆栈函数,这里直接下载已经修改好的文件0 r. Y5 j; c; x: @# z, }

. [4 B8 F: Y+ c9 T9 g0 [: }⑩修改os_cfg_app.h文件,系统裁剪和内核有关的,这里直接下载已经修改好的文件+ V1 f3 I1 ]2 J5 P: M5 k2 J

; D' T  Y7 K+ k9 [# L. V: u, G8 Z. A; ]& Q* d0 m1 l" d
此时编译一下,会出现以下问题
' p6 W0 Z0 K0 t4 @$ z1、PendSV_Handler是做上下文切换的,重复定义,而STM32F4xx_it.c只是给的一个框架,屏蔽掉即可& V) `6 B1 V# y; g8 u  k7 ^3 t( J
EQ2MHA91@YK`[3%{KK41I2M.png ( ^  A" f; H& R9 u. D$ }
" C- J5 I0 l9 K8 _& X6 y" I6 [
2、搜索到是os_cpu_c.c里面的堆栈函数,由于在汇编文件已经定义,所以这里屏蔽掉即可% O* q8 W8 |: }7 ^3 g5 `! m5 q8 `+ w

8 U8 s- F2 v9 j! Q4 S: ^1 n! ? 7$VAE67YYI}KPCB3H%(]1ME.png
  m' m9 l0 F  u1 M: Q0 H/ Q% ]& C9 z
: @7 e) |1 J9 j) p9 ?十一、修改sys.h
# Y  |9 j- u6 b* S: X/ c2 @这里要使用支持UCOSIII的SYSTEM文件夹
: C* M8 k- t+ q$ v: E- }
7 x% t+ f3 F& K  ]+ V 6CT`L}{072DX0~71NE9_]O7.png ( H' X* \$ }5 n1 U

' g$ z' B2 V0 R编译后出现的问题: 中断服务函数重复定义,同样,STM32F4xx_it.c里的屏蔽掉即可3 X6 `. K' |8 i: e4 x  E9 U. ^! y
+ P" S+ C, _# i3 w* Q
{R_K)YD1Q}3(HN)`IM}TJTS.png . b1 @' A; u+ p9 x
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

7 m  O2 E9 _; O8 y/ p(2)、创建一个led0_task任务,用来控制LED0的亮灭。
$ w* Y" V: E8 D. K4 F* J# K# f, z* X3 s9 w/ T( U
(3)、创建一个led1_task任务,用来控制LED1的亮灭。
- S" ?5 I9 Z% b$ s
9 X1 R- S. [3 n5 S(4)、创建一个float_task任务,用来测试浮点计算。5 O, o8 ~: d& _8 Q( ^0 e7 ]

1 l* D; n# z- T0 Y( X: g
6 Y. x6 [' j" ~如何移植不同版本的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的版本了。
+ q2 |: B! \  {/ @) e7 x  `% l, X
& ?1 R! g+ \1 Z3 Y
5 Y4 w! x3 Y' ~' d7 k) n

& ~- }8 o7 r& \- y. f7 D& |# R; |$ J
; j& E: l! h) x* q* l- z$ V# \; Q8 _
7I[K$}3SNOZL%AIE@D$F@PU.png
收藏 评论0 发布时间:2022-5-18 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版