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

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

[复制链接]
攻城狮Melo 发布时间:2023-10-19 15:47
其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。
: b% j- b* C! p6 D  B8 }( U
微信图片_20231019154705.png

0 I* x6 E# b0 u( d6 o. B! X前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。7 w7 j8 l' |3 r3 B0 X4 q% d
微信图片_20231019154701.png

# G% j, H; H$ E9 M- S5 _: _操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。6 s  I( [: M' w( Y- g5 o5 }
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。2 H. q! ?" M9 H8 @7 J1 t. L
% s+ }1 f2 N+ O+ @+ s) v1 h
安装FreeRTOS
  z# h. Q8 m! \6 m0 T
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)
3 n- T9 @4 x1 v6 @* Z4 u
5 T" n* s+ C3 m
微信图片_20231019154657.png
% L# b* n: z8 Q& }  @# a2 y. z
微信图片_20231019154652.png
3 a) B9 I( @* r6 o* O0 ]
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png

8 V: g, |$ d) ?! _0 @" \0 R& j  `其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。* U$ S) n! a. ?2 t% a! E5 q7 m+ r
微信图片_20231019154646.png
$ ]/ q5 N1 d6 o) \& L) d
微信图片_20231019154642.png

7 N4 z/ r7 Y1 m" B+ p4 O之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。" d9 B# D7 ?) U+ |' L
+ T; M( ^. M4 s. K' }
微信图片_20231019154638.png
4 M4 O3 S2 o! d
微信图片_20231019154636.png

4 p/ Y9 j( j  ~4 v- u3 |
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)
    # S+ n4 O, k1 r7 D
  2.   #include <stdint.h>7 I  O0 |& L8 r1 J! N$ w* r
  3.   extern uint32_t SystemCoreClock;% T: k3 m  s7 h3 [
  4. #endif
复制代码
% H6 ?5 h, n3 f4 Y; E- u, j1 R
. [! I# v4 R) a  P  E
之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。
& |5 C0 B& A6 z. h0 B  V
微信图片_20231019154632.png

2 d/ }7 I9 x+ I" {. `( w我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)

0 S7 `: c. `) n. w9 ]
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数

: {- g( {! D& }+ F% ?  S( Z7 t) v4 y3 T' D5 ^$ A. x
微信图片_20231019154629.png
0 X& h; |; f' j# }0 u' C  o+ V! j& w
将对应的构造函数值改为0即可关闭这些构造函数。& k- C% u; N/ A% C' D

2 G3 A" G1 q, y; @' ~* _
4 [7 G8 ]1 f$ G0 S& p
微信图片_20231019154626.png
& U# y: O* H9 j0 j. y
这样子我们的编译就没问题啦/ U# e% }8 r1 m) `& z) b5 u
微信图片_20231019154620.png
/ O9 b4 l: d) {$ V
转载自:电路小白
如有侵权请联系删除
8 h" K( e- w9 L$ I

2 o, v" M- X( X4 D* t# o% Z# j. I7 E; \- C/ z$ c0 g! O/ j+ r
赞 收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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