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

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

[复制链接]
攻城狮Melo 发布时间:2023-10-19 15:47
其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。
" h* t% g6 V! q( C
微信图片_20231019154705.png
. }* e6 D2 a5 Z7 [- `3 ~  i
前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。( c! ]& p6 y$ U: G
微信图片_20231019154701.png
, }- ~- [4 l, r
操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。
7 V+ Z# Q* r7 p2 L  o7 D
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。# w$ I8 G+ k. b4 C6 U- t
" ~) e: B* b# B. \. a
安装FreeRTOS
2 ?$ x1 D& @- i5 N* @: ?6 N
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)$ G: ]) g0 U0 C

4 w4 q  T1 D) \, H
微信图片_20231019154657.png
, I5 b0 n6 k/ @4 J. z2 O# C8 P. ?
微信图片_20231019154652.png
: G& X# H0 h9 ?
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png
9 ?( z0 H3 Q$ R  ^
其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。$ }& a* C# E( \" k! i" J
微信图片_20231019154646.png

- w2 j1 D1 ]5 }* E; T2 ?
微信图片_20231019154642.png
) G; U4 t7 K" \# Q7 c
之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。8 m1 R, X; B3 g: [) J

/ f9 g2 l3 W$ n9 e
微信图片_20231019154638.png

, i- _. v! P2 ~
微信图片_20231019154636.png
% W5 ~9 H+ q. G" e! l" t: i/ m  h
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)* ~- T! H( g& u- m
  2.   #include <stdint.h>( a5 V5 w  k: S! s+ I$ B/ N4 m
  3.   extern uint32_t SystemCoreClock;' w! i, b. S5 e1 q# I4 e% z
  4. #endif
复制代码
1 F  h+ @4 }: X' Z# X9 C( z

. c0 v4 c$ q2 Z5 {/ C5 P/ m9 x之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。
: k# y1 F& F$ J3 `- O* H
微信图片_20231019154632.png
5 y, Q5 l( w' W/ }; K0 N" b- P( n
我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)
7 y7 J6 `, ~: U& G
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数

' G) Y0 V/ H4 q' ^
2 i( `  |* q" @% f
微信图片_20231019154629.png

8 j3 ?9 y9 S6 T/ X3 E% ]" g7 U将对应的构造函数值改为0即可关闭这些构造函数。
0 k% E* I7 z$ s7 k* n% [+ k) S: b

0 g  ?) l2 y7 p9 p
, t/ y  t+ M# k8 b2 f' h
微信图片_20231019154626.png

4 j% h. o$ c6 f  A这样子我们的编译就没问题啦7 R: d" h# D& P9 r0 O" W
微信图片_20231019154620.png
. I' X( f! W. T2 N
转载自:电路小白
如有侵权请联系删除

& ^& [% k$ K4 O/ p, a

) l( r2 n- _6 R- L: S
2 L5 Y0 u! c3 {" @, [6 S
赞 收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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