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

【经验分享】STM32F2X移植FREERTOS

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:03
1、要移植FREERTOS,首先要去下个,我是去直接下了个最新版的FREERTOS+ n( N% V; s- @3 ~: \% u3 u6 ^/ f) {( N
下完包里有source源文件与demo工程 文件,如果有符合的型号,可以直接移植工程,也省了建立工程;当然就算型号不同也可以直接移植,我这里是自己建立,走一遍,加深印象;
+ t4 @2 h. f* y# B' g: ~9 j: K4 d' n/ A+ t9 q# ]
需要的文件:
7 p: M9 X% C/ i2 d# k    FreeRTOS的文件结构非常简单,移植或者版本升级替换也非常方便。
, y2 u& }6 s/ [8 s8 x    1)与FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c8 g3 m* [5 `$ ?4 c
    该文件位于FreeRTOS\Source5 H: w5 ?# T. N
    2)与内存分配有关的文件共有4个,分别是 heap_1.c,heap_2.c,heap_3.c,heap_4.c。4个文件只需选择其中的1个,STM32选择heap_2.c。
+ d: j7 b* M: L) Y. t    该文件位于 FreeRTOS\Source\portable\MemMang
5 [6 y, v& D" e0 ~- ?! B    3)与移植相关的代码包括 port.c,portasm.s,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择IAR编译器,平台为ARM_CM3。3 @9 m/ Y. o% n. d; h' J
    该文件位于 FreeRTOS\Source\portable\IAR\ARM_CM3
# C; T. A. J" h+ [. ~* i    4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。
  m1 j& D7 E- n4 l2 X) o    该文件 FreeRTOS\Source\include
& G) J4 F& _0 S- g$ `9 [
7 x; ]* p# P- _& K  }当然我这里把所有的.C都包含进来了。% E2 {# R5 _" m! Q
& G; A1 a% |+ j/ ?8 c9 O' \* c3 Z+ @
20180708092307580.png

5 k( [3 d) v# d1 l. r
$ b8 H. x, [) u) J7 O2、接下来修改启动代码
: a# A' h" Q; x/ h* G4 D7 {" ]2 o3 c/ ~
由于SVC_Handle,PendSV_Handle和SysTick_Handle在portasm.s中被重定义,所以需要在启动代码中修改这些中断向量的名称,并声明这些中断向量为外部函数。这也是初次使用FreeRTOS容易范的错误。* O2 G& A" e4 Y7 X- {  K& \' K2 e

4 |$ c& [5 A; h- yPendSV_Handler、SysTick_Handler、SVC_Handler这3个函数在startup_stm32f2xx.s启动文件中,启动中需要 使用到这3个,而8 [: ~  ~; A& P5 J9 a) w9 H% W

0 R7 z0 U+ o  s! g5 Z0 NxPortPendSVHandler、xPortSysTickHandler、vPortSVCHandler在portasm.s中,2者名称不一样,一般操作是在FREERTOSCONFIG.H里增加宏定义,如下 :" G" F6 O( S% j- L. Z. b6 s

" y/ z8 d4 B! \: d' ?9 Y' V  R#define xPortPendSVHandler   PendSV_Handler
; F& E+ _& m' }1 v, M7 k#define xPortSysTickHandler  SysTick_Handler7 E' h7 d2 H9 v. Y& Z! y
2 a% B- M4 A/ c/ L( x' |0 Y% _8 B* a
#define vPortSVCHandler      SVC_Handler& Z0 s1 y4 i- u
/ v$ m( B  |6 D( t6 a
当然在stm32f2xx.c中需要注释掉原来PendSV_Handler,xPortSysTickHandler;
% ^0 \% V9 [5 E8 t( [' ?: Q! Y" B$ l5 K+ M$ h. S* F: W) N
3、设置IAR配置: |' A) J$ K8 _3 n6 P7 k7 |( {

  m$ `  v% a! u. T$ C3 m/ {常规的我就不讲了,最主要的就是选择好型号,配置路径如下$ t$ V. h+ n; `

" q0 }6 c2 L$ k6 v* d
20180708095005989.png
8 C7 ]$ _8 m4 _6 K2 x; ~& I# A

* Z" k7 f2 ?; {4 t* r, l常规不用设置汇编,但此处需要对汇编进行路径定义,要不然编译会出错% j0 p  }2 C- C+ H0 t# f* i' {

, O  `  q/ ~0 g3 \8 u2 p9 q
20180708095109125.png
. s. f  {9 f/ ~( t5 S) q% v

" @0 m. `3 i: Q8 H其它按常规的来就行了。, O% j, L2 F8 `7 N3 j* W
8 M2 f: s: d1 I4 ?: N
4、配置freertosconfig.h  Q, H- Q2 f2 I! y8 l, S- |  W

) T8 `8 E& ?9 k/ s对于用户来讲,Freertos已经提供了一个窗口给用户配置文件,即freertosconfig.h6 J3 j5 v+ M- D4 r( A3 e. r
+ Q, k2 s, ?8 R, A3 L* X3 f, o
对于里面各项定义,自己可以查询百度下,其中:
9 L$ S7 T  S* [; U. O2 p
! w, l' Y( a9 A) t) y) N" f7 \#define configCPU_CLOCK_HZ ( ( unsigned long ) SystemCoreClock )编译时需要声明,不然会出错;
  x* I7 J9 \- `3 m) a9 S
" z( |" k; e: B8 }$ [) NfreertosV10.0.1此版本很多宏定义已经没有放置在freertosconfig.h,当用户需要用到哪个模块时,需要自己将宏定义放进来,如要用到系统软定时器组,需要自己添加 :
2 w( l  w: @1 ^; f. ?2 O/ h. U+ }
  1. /* set soft timers para. */
    7 v5 S2 s! T; m0 l' W: e4 n/ d
  2. #define configUSE_TIMERS 12 U6 U) x, B. t
  3. #define configTIMER_TASK_PRIORITY  24 c& b8 _$ o- J. y! b( P+ r
  4. #define configTIMER_QUEUE_LENGTH   3# ]: y$ f- {+ E8 Y0 H7 C
  5. #define configTIMER_TASK_STACK_DEPTH    512" R/ Z4 z/ D5 F' ^' _
  6. ( Q; P) ^0 ^! R0 U! F0 o
  7. /*end of set soft timer para */
复制代码

; ~' a( q: x! f5、建立完整工程,调试
+ m5 q  a$ O. @* a
' M$ y9 {7 D) @- F0 B3 i8 z1 a, P上面配置完毕后,添加自己的工程调试;
9 d  Z1 g3 m" S  }6 r- q3 u$ w$ @- o( h& ~* @' o/ d* P
我自己添加工程如下:9 p8 `' r. R; I" t# n- |' B

1 U' ^& |7 u6 j0 j6 c9 S& c
20180708100301588.png

9 w& Q" v  t* x4 e- T) a1 {" n+ k( E( J" |
接下来设置硬件初始化,添加任务,启动任务;: V' D" T# E- o& ?6 c& ?: f
7 h5 r' L6 g3 Z& `7 J
特别需要注意的是,任务建立时,给任务分配的空间一定要足,刚开始尽量多分配一点,以免内存不足时,出现莫名其妙的问题,还不好找问题;我调试过程中,就出现了几次这样的问题,后来才发现 是空间不足;" o0 ^+ m1 I/ ~, F2 ]

6 s' x5 o# @& d7 t! q9 r, l) j
4 D8 e- v. I; q/ z9 I
收藏 评论0 发布时间:2021-12-2 15:03

举报

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