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

【经验分享】STM32F2X移植FREERTOS

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:03
1、要移植FREERTOS,首先要去下个,我是去直接下了个最新版的FREERTOS
& ~# E1 T% e9 x1 ^  C下完包里有source源文件与demo工程 文件,如果有符合的型号,可以直接移植工程,也省了建立工程;当然就算型号不同也可以直接移植,我这里是自己建立,走一遍,加深印象;& O, i4 T  j% u6 h

8 e: C- h+ r' P: g4 t需要的文件:
8 J$ w4 J3 L& x5 q9 _' _    FreeRTOS的文件结构非常简单,移植或者版本升级替换也非常方便。
" a; _- \; O, c8 E1 _) S. F+ W    1)与FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c! x8 \. b2 M: Q) |: ^1 v/ b) i: D7 B
    该文件位于FreeRTOS\Source
' c3 g# B6 l+ S4 q- f; u    2)与内存分配有关的文件共有4个,分别是 heap_1.c,heap_2.c,heap_3.c,heap_4.c。4个文件只需选择其中的1个,STM32选择heap_2.c。/ l% ]% v: f0 B% O. y
    该文件位于 FreeRTOS\Source\portable\MemMang2 G, A  r1 ]0 `2 Q
    3)与移植相关的代码包括 port.c,portasm.s,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择IAR编译器,平台为ARM_CM3。
3 M* S9 o: u; H9 e' N    该文件位于 FreeRTOS\Source\portable\IAR\ARM_CM33 G2 e# e+ Q8 W! u- Z8 u; O
    4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。$ C6 _$ Y  P0 v2 G5 x5 l
    该文件 FreeRTOS\Source\include7 l1 Z+ U& j( D

- I/ _, Q; K: S/ E当然我这里把所有的.C都包含进来了。
: g5 E8 _0 X) p. E: C' T) o  M& X  T% L( t- B$ f/ d. z+ G
20180708092307580.png

$ E/ h" G( R$ u; J" t4 W
# E  j7 C! [. j" e2、接下来修改启动代码2 J3 ~2 ^- E& j& H2 q8 d2 @; [

- u5 ^- d' E" @' l8 K' O8 T! H: L. [由于SVC_Handle,PendSV_Handle和SysTick_Handle在portasm.s中被重定义,所以需要在启动代码中修改这些中断向量的名称,并声明这些中断向量为外部函数。这也是初次使用FreeRTOS容易范的错误。2 ^* m9 ~! g  R6 Q+ B/ M

# `1 T5 }! y' l8 Q( t+ d0 CPendSV_Handler、SysTick_Handler、SVC_Handler这3个函数在startup_stm32f2xx.s启动文件中,启动中需要 使用到这3个,而2 ~9 B5 \+ G, Y6 r

- l/ y* C8 e' `9 X/ ^xPortPendSVHandler、xPortSysTickHandler、vPortSVCHandler在portasm.s中,2者名称不一样,一般操作是在FREERTOSCONFIG.H里增加宏定义,如下 :) Y+ d# B! k  U6 [& ^

. W6 M- w# x2 x3 J) [- _#define xPortPendSVHandler   PendSV_Handler
! u+ O, h  F: d2 I1 b- l. D#define xPortSysTickHandler  SysTick_Handler0 R0 a! n8 c: S' c2 {3 W- F
* F$ i8 [" Y" H
#define vPortSVCHandler      SVC_Handler
' F" T) o- i# O, }, J. J+ ]6 f
1 L9 K. ^# d  n$ y8 L当然在stm32f2xx.c中需要注释掉原来PendSV_Handler,xPortSysTickHandler;# K5 d( F( S' \0 Q. p$ N5 n  M

4 w, ^" k3 n- ~  i4 |2 T, G3、设置IAR配置1 F3 a( e8 [  g' k/ K
( _$ T! ^' v! s" c, I" x( Y5 l) k6 K
常规的我就不讲了,最主要的就是选择好型号,配置路径如下
* _; Z- |. e; a
; h/ }1 ]+ S' r) f! s" I
20180708095005989.png
6 G4 X& l3 v$ M1 H+ ~  e7 B

$ t5 Y: O2 G- S  w9 D# A常规不用设置汇编,但此处需要对汇编进行路径定义,要不然编译会出错
. A+ i% a6 U; i5 L4 ~- @' A- q8 O' a( @2 S0 H" \# P
20180708095109125.png

+ K& k8 z9 s$ N. t# j1 b
* W) B2 B4 h, a- y其它按常规的来就行了。
' x6 Y9 J0 ?$ I8 {1 z4 l6 V+ q& x. ^; g4 m+ a7 x$ ~* R  g/ T0 c
4、配置freertosconfig.h: V  F: Q1 Y, n5 X8 n3 a
) x0 f4 b. ]% b  z
对于用户来讲,Freertos已经提供了一个窗口给用户配置文件,即freertosconfig.h
/ E+ s+ s. ^, l' N# q
, Z9 \* t, t2 }  _对于里面各项定义,自己可以查询百度下,其中:
! m& o7 Q5 P% j4 h, K2 I4 K
, N. J$ b2 F% M, f% a& J( m0 T#define configCPU_CLOCK_HZ ( ( unsigned long ) SystemCoreClock )编译时需要声明,不然会出错;1 O2 @- i+ a" R: r! c% Q6 J- J# Z% G
  d9 P: O# j* Q1 ]+ h
freertosV10.0.1此版本很多宏定义已经没有放置在freertosconfig.h,当用户需要用到哪个模块时,需要自己将宏定义放进来,如要用到系统软定时器组,需要自己添加 :9 o$ n# ~' n, N: P2 H! ~0 _
  1. /* set soft timers para. */0 S- A* F- }  n8 h- ]; r/ J2 J
  2. #define configUSE_TIMERS 17 _+ u* T  U6 n; W
  3. #define configTIMER_TASK_PRIORITY  2/ j7 c5 P: I- z; j
  4. #define configTIMER_QUEUE_LENGTH   3
    : P& U+ M0 f; K3 A9 u: h5 s: U
  5. #define configTIMER_TASK_STACK_DEPTH    512
    $ U; y2 d% {5 N, o/ O5 s9 {$ s% F

  6. " S' R6 Q6 n9 |
  7. /*end of set soft timer para */
复制代码

; p" y/ f; _: `: W3 h5、建立完整工程,调试
9 Z. `2 l% }" ?$ M4 h
; r9 ^. j* Z7 {$ O3 e上面配置完毕后,添加自己的工程调试;  L' |& f5 F3 X! A+ q( T: \: c- Z/ T+ [
5 ^  i7 f& A7 x  l
我自己添加工程如下:/ t# y- h1 c; p2 b
8 Z- E& i! K6 T' v# u
20180708100301588.png
3 t+ M" B; l+ y& o1 H! I
" h* q. s- a: s3 F8 @+ y
接下来设置硬件初始化,添加任务,启动任务;8 S" H3 [) `* E4 `0 L$ g

  G$ P" X& c) j; q. v特别需要注意的是,任务建立时,给任务分配的空间一定要足,刚开始尽量多分配一点,以免内存不足时,出现莫名其妙的问题,还不好找问题;我调试过程中,就出现了几次这样的问题,后来才发现 是空间不足;: B; O7 [7 ^' Z

6 `7 {7 X8 @2 O5 H5 L) R
$ o+ c2 y* M$ f/ C; E
收藏 评论0 发布时间:2021-12-2 15:03

举报

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