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

基于STM32F407的FreeRTOS环境搭建经验分享(1)

[复制链接]
攻城狮Melo 发布时间:2023-10-19 15:47
其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。
3 J6 Q  W( ^  X7 Z3 o9 l
微信图片_20231019154705.png
( o! v& d1 C& Z8 k. [9 s* J
前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。
1 ]- `' ^6 J6 A
微信图片_20231019154701.png
2 ~; M4 X* U( m: e: \# z* Z
操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。1 t% s( b# Z& N& {4 }
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。
# P! O, u/ U- ^
7 [! D, O# r0 E
安装FreeRTOS
3 i" g' z4 ^3 @" M
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)
. a) T% |1 i( s- N) {8 U8 Z1 v% x0 H0 `% D2 M) B
微信图片_20231019154657.png
& B. l8 `; T6 v& s( V" ^
微信图片_20231019154652.png
7 s; K; z4 U, j% y& [' d
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png
( @! G2 y! t! t* J
其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。, h& a/ G  S7 j; `4 B8 x1 T. n
微信图片_20231019154646.png

" D6 \* g% [  ^, X: x
微信图片_20231019154642.png
0 R9 y3 I! z! K& P) U; \
之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。2 }1 ^' y% _1 j: E

) ?( j$ U+ ]7 c0 Y# l
微信图片_20231019154638.png

8 C, L2 h- Y# V6 f
微信图片_20231019154636.png
0 Q/ S* p+ ]0 z1 `2 B4 w
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)2 E$ ~8 D6 g& _* l! I7 t5 X. v
  2.   #include <stdint.h>
    & O8 i( c0 u* j4 h7 T/ l
  3.   extern uint32_t SystemCoreClock;! u! S8 N& J; R: x
  4. #endif
复制代码
7 f4 B% S6 h) Y- S0 I

9 a0 n  V4 }; n. ]1 w' `之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。

7 r# c/ W* ^# K
微信图片_20231019154632.png

3 Q& b. h9 [4 b' J# N8 _( F2 E0 ^( k我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)

' z0 u4 d' E/ G0 z8 R; F$ b" {5 g; X
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数
/ L& f- V0 |0 R- u

- z: I5 i& ^* Y% P% D6 `5 C  O
微信图片_20231019154629.png
" o$ [% A2 q6 r* Q
将对应的构造函数值改为0即可关闭这些构造函数。: ~* t# w6 Q3 X0 R: a
* p* y' @, A3 l! ]  O. ^0 U
( d% Y9 N' W) T0 v6 b, U9 ?4 h
微信图片_20231019154626.png

6 b8 j: y( [( O  k* j+ s" {这样子我们的编译就没问题啦) M( g7 d1 Y$ A  ?0 \5 g
微信图片_20231019154620.png

& j5 r: M( P3 d1 T' o3 |
转载自:电路小白
如有侵权请联系删除

) v) ?' `$ t' a) f1 h9 \

) Z* c$ ~6 g2 O$ h
6 t! ~# m' @2 C4 v
赞 收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版