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

【经验分享】STM32F2X移植FREERTOS

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:03
1、要移植FREERTOS,首先要去下个,我是去直接下了个最新版的FREERTOS
7 s- m/ c' M. C9 m下完包里有source源文件与demo工程 文件,如果有符合的型号,可以直接移植工程,也省了建立工程;当然就算型号不同也可以直接移植,我这里是自己建立,走一遍,加深印象;
: H. ^" E' n0 \3 F7 i! e1 r; y" j& l( O/ {1 ]* g! E
需要的文件:
7 [" W, {) j9 C( {( ~) h    FreeRTOS的文件结构非常简单,移植或者版本升级替换也非常方便。3 `7 f; W8 M6 k: q- o: p7 l0 ^
    1)与FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c
+ {  L' @" P- ~1 V; G    该文件位于FreeRTOS\Source
1 y- O5 p2 k; D    2)与内存分配有关的文件共有4个,分别是 heap_1.c,heap_2.c,heap_3.c,heap_4.c。4个文件只需选择其中的1个,STM32选择heap_2.c。0 A# w/ E7 |$ z5 h( T8 X7 O
    该文件位于 FreeRTOS\Source\portable\MemMang0 i, n' X$ R1 x; s
    3)与移植相关的代码包括 port.c,portasm.s,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择IAR编译器,平台为ARM_CM3。
& E  g1 F$ h" \" E5 Y  O; K    该文件位于 FreeRTOS\Source\portable\IAR\ARM_CM3# z: j; v4 ~& n+ @+ n2 D% i! W
    4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。
9 _' F: u+ h2 R9 ]. l    该文件 FreeRTOS\Source\include2 i2 C0 A  T- w7 b4 k
1 D1 }4 S* t$ c5 |; ]
当然我这里把所有的.C都包含进来了。
0 h' I8 H4 ?! s3 P# E. u. T8 b1 Q: r
20180708092307580.png

- A1 k/ \: S  v0 O. Q0 K1 @1 h
) ~! h' l; S: h  k2、接下来修改启动代码
  ~+ f  {" I) L  D3 J: I3 U" j# J# T8 O" I/ c3 ?
由于SVC_Handle,PendSV_Handle和SysTick_Handle在portasm.s中被重定义,所以需要在启动代码中修改这些中断向量的名称,并声明这些中断向量为外部函数。这也是初次使用FreeRTOS容易范的错误。
0 [0 G' A) ?7 o7 Y, K3 M7 }' P9 N8 @' h' M
PendSV_Handler、SysTick_Handler、SVC_Handler这3个函数在startup_stm32f2xx.s启动文件中,启动中需要 使用到这3个,而
: i# Q. P9 q; e$ _8 J! l
3 d; u6 |; s0 |( Z9 H5 Y0 [xPortPendSVHandler、xPortSysTickHandler、vPortSVCHandler在portasm.s中,2者名称不一样,一般操作是在FREERTOSCONFIG.H里增加宏定义,如下 :
; I6 i! k4 ]/ n6 C% A4 T  q8 S, z3 P. Z8 k
#define xPortPendSVHandler   PendSV_Handler
# O9 C8 \6 v* a6 R  `* Z, x#define xPortSysTickHandler  SysTick_Handler
9 H# u7 K1 Q" G2 B5 h2 O, J- g
; b) @; R' M0 W3 D7 C) b#define vPortSVCHandler      SVC_Handler: r! G( [& Y* M5 o' F
/ H' z9 w- G' M6 p3 K, k+ ]! d
当然在stm32f2xx.c中需要注释掉原来PendSV_Handler,xPortSysTickHandler;0 N: E- s6 `' q. q8 G
0 \0 ]8 A$ Y- u% U8 P+ M: V# O
3、设置IAR配置: ~* a; j$ {! A% q

9 r- g0 y9 _; m4 E1 Z0 O/ t! q2 q常规的我就不讲了,最主要的就是选择好型号,配置路径如下# P% p  E1 D# v; ?( F
: n: k  c. N5 P' ^: P8 C! Z4 M* b! k
20180708095005989.png
5 x* y+ ~6 T/ G6 I) Q
! S& C, [7 [; E  y. D7 V
常规不用设置汇编,但此处需要对汇编进行路径定义,要不然编译会出错
1 U! k* i$ Z1 s. ^5 @  i
$ {7 G3 J: g( U$ I
20180708095109125.png
) M$ ]8 R( U& Z4 ]! J: H9 s9 V

" W: t. q. _; b& s/ C* u其它按常规的来就行了。
+ W' s6 n$ d4 ]. `  P2 P7 F) m+ L% D9 F5 k7 f2 d; u, x) p
4、配置freertosconfig.h
5 g9 e2 J" l7 W% l5 j5 L4 f! K& O7 K) d
对于用户来讲,Freertos已经提供了一个窗口给用户配置文件,即freertosconfig.h+ F; j$ e; ^1 M9 J. ]% w
9 O0 [0 w" H+ s+ R" e! v; x) u
对于里面各项定义,自己可以查询百度下,其中:
2 D8 t& D9 ]5 C+ g: y. P4 z( o. v7 ^4 D* N/ [/ Q% o, w
#define configCPU_CLOCK_HZ ( ( unsigned long ) SystemCoreClock )编译时需要声明,不然会出错;
3 D/ [  G( `. n6 z
+ ?9 _* j' O8 gfreertosV10.0.1此版本很多宏定义已经没有放置在freertosconfig.h,当用户需要用到哪个模块时,需要自己将宏定义放进来,如要用到系统软定时器组,需要自己添加 :
" x9 q1 O1 |: u2 B/ A1 ^0 z: @
  1. /* set soft timers para. */
    6 s' u6 k2 U% m! d# ~+ ~) A# e, J6 |
  2. #define configUSE_TIMERS 1* p% Q5 F, v2 e: h" I
  3. #define configTIMER_TASK_PRIORITY  24 K( {6 n4 }0 Y( @0 Z1 g
  4. #define configTIMER_QUEUE_LENGTH   3
    6 L6 y# F) a! g. w  @# o
  5. #define configTIMER_TASK_STACK_DEPTH    512# Q# Z$ b" C- @" ~, p
  6. 6 z; U* F7 H) F6 u& N3 i
  7. /*end of set soft timer para */
复制代码
; t! }1 Q6 g2 i" ^# A
5、建立完整工程,调试
4 w7 C+ L, z) D5 K5 F
( H6 H$ f: w1 L% R2 N# p- z: m4 T: {上面配置完毕后,添加自己的工程调试;
  z' r9 t. n. m& t8 A+ B# l# n3 O+ D6 k" G
我自己添加工程如下:
& i5 i4 C, k8 B1 ?! v8 T
5 T6 j( V; A8 k* o: z8 o
20180708100301588.png

& _* F( D. c  q9 T* O3 j1 r/ J2 Q2 s4 X/ I
接下来设置硬件初始化,添加任务,启动任务;
3 l  `% w( \& }4 O& Y! j0 t3 b9 w+ b& L5 G, ^, Z7 E, k! C8 ^
特别需要注意的是,任务建立时,给任务分配的空间一定要足,刚开始尽量多分配一点,以免内存不足时,出现莫名其妙的问题,还不好找问题;我调试过程中,就出现了几次这样的问题,后来才发现 是空间不足;. `7 u! U9 l5 H" G$ q( D6 M/ c
6 R: M9 N5 [8 [6 d" }, f; z
: Y8 ?& U3 s* }
收藏 评论0 发布时间:2021-12-2 15:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版