STMCU小助手
发布时间:2021-12-2 15:03
|
1、要移植FREERTOS,首先要去下个,我是去直接下了个最新版的FREERTOS) G3 X1 d6 z8 [1 [( \- _; Q& ?8 F, ^ 下完包里有source源文件与demo工程 文件,如果有符合的型号,可以直接移植工程,也省了建立工程;当然就算型号不同也可以直接移植,我这里是自己建立,走一遍,加深印象; 9 R+ i. |% L7 z0 Y! H. w W 需要的文件: FreeRTOS的文件结构非常简单,移植或者版本升级替换也非常方便。, D a5 B& _" v( Q* g7 p' ~ 1)与FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c/ ^* p) C' X4 Q 该文件位于FreeRTOS\Source 2)与内存分配有关的文件共有4个,分别是 heap_1.c,heap_2.c,heap_3.c,heap_4.c。4个文件只需选择其中的1个,STM32选择heap_2.c。* _, i' `( I& w7 v5 K9 S 该文件位于 FreeRTOS\Source\portable\MemMang 3)与移植相关的代码包括 port.c,portasm.s,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择IAR编译器,平台为ARM_CM3。* S( [5 i( W3 g6 ], |# f& r 该文件位于 FreeRTOS\Source\portable\IAR\ARM_CM3# C. e% I7 m2 N+ d! I 4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。: F: s, |& W) k; Y/ r2 D 该文件 FreeRTOS\Source\include: \# ?: w3 p% E" a7 C 当然我这里把所有的.C都包含进来了。 7 K; Z& Z i$ ~; w) ~
2、接下来修改启动代码 由于SVC_Handle,PendSV_Handle和SysTick_Handle在portasm.s中被重定义,所以需要在启动代码中修改这些中断向量的名称,并声明这些中断向量为外部函数。这也是初次使用FreeRTOS容易范的错误。- H' }* J* R3 t, a! P$ l+ A6 O9 j PendSV_Handler、SysTick_Handler、SVC_Handler这3个函数在startup_stm32f2xx.s启动文件中,启动中需要 使用到这3个,而# ]8 K9 j+ n6 y, |' W, ^7 m xPortPendSVHandler、xPortSysTickHandler、vPortSVCHandler在portasm.s中,2者名称不一样,一般操作是在FREERTOSCONFIG.H里增加宏定义,如下 : / N, o: j E' e #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler7 x8 z& V2 b% G1 r #define vPortSVCHandler SVC_Handler9 I" p% j9 l6 y9 Q# L3 k) L! v' H 1 G5 \& b/ W: n$ F7 W8 q/ R 当然在stm32f2xx.c中需要注释掉原来PendSV_Handler,xPortSysTickHandler;6 r0 L" W% U9 S3 z- ?) G- A1 ? 3、设置IAR配置 : Z6 k% L* v" x5 ?* r 常规的我就不讲了,最主要的就是选择好型号,配置路径如下# g$ e7 s. H3 a; J8 g0 X j: S5 k
常规不用设置汇编,但此处需要对汇编进行路径定义,要不然编译会出错5 h# |0 M _( ]# t ! @7 Z/ X% p; Q5 S5 m4 O) L* _
. _/ _& R9 C2 p+ A5 }# O, X/ r 其它按常规的来就行了。+ O3 ~% f8 _4 x r 4、配置freertosconfig.h 对于用户来讲,Freertos已经提供了一个窗口给用户配置文件,即freertosconfig.h ( F0 @: _) F9 N, R 对于里面各项定义,自己可以查询百度下,其中: 3 F4 y4 m/ h% f3 C #define configCPU_CLOCK_HZ ( ( unsigned long ) SystemCoreClock )编译时需要声明,不然会出错; x; {! D9 R9 y! P0 x/ d; H freertosV10.0.1此版本很多宏定义已经没有放置在freertosconfig.h,当用户需要用到哪个模块时,需要自己将宏定义放进来,如要用到系统软定时器组,需要自己添加 :
5、建立完整工程,调试 : O7 P* [) C/ d k, F; s4 Y 上面配置完毕后,添加自己的工程调试; 我自己添加工程如下:& x) F) H& o2 o& y( U3 J x' o% Y! }2 M 5 E4 ~ G! ^2 I$ |1 z: R
接下来设置硬件初始化,添加任务,启动任务; " J( _- u/ y! o0 J* Y 特别需要注意的是,任务建立时,给任务分配的空间一定要足,刚开始尽量多分配一点,以免内存不足时,出现莫名其妙的问题,还不好找问题;我调试过程中,就出现了几次这样的问题,后来才发现 是空间不足; 2 ]# J: w! `% v0 H' m, s2 e# v |
微信公众号
手机版