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

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

[复制链接]
攻城狮Melo 发布时间:2023-10-19 15:47
其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。( w# M6 d: o0 U- g: L" M
微信图片_20231019154705.png
: E( }4 [6 D# g
前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。; v9 i9 X5 s; \" `# j( Y
微信图片_20231019154701.png

! I4 `$ w* a5 m( T9 A操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。0 p" P+ g& S$ N9 p# x
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。
1 B, F1 {2 K1 X0 ~9 Z# W$ Z' q5 }& v' u
安装FreeRTOS
- ~7 x6 K( C3 T, o+ h4 L' z( q
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)& D8 f  e  i/ T: T  P

- N+ ^6 _! f/ b7 X6 e" t) u9 v5 N
微信图片_20231019154657.png
+ {7 H/ p, ?! I
微信图片_20231019154652.png

, D0 @! {( M" G4 q下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png
- G- E& b3 W* s. O8 G
其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。
# |6 y, l' `/ j/ x! ^  t  U
微信图片_20231019154646.png
, A$ h: e$ l$ [% G
微信图片_20231019154642.png
! I3 `3 H: |& b8 g- ^/ `* ]. M
之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。. P4 t* h( W  {- J' |5 y& n
0 _; o2 n: l7 S
微信图片_20231019154638.png

2 _8 ]2 g1 y+ }% l- [, E
微信图片_20231019154636.png

1 m& I; A9 i7 n$ q" R: F; u2 O
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)
    $ e  Q( U4 |% o- o- w" Y4 n
  2.   #include <stdint.h>
    # D: A* v, ~0 E- ]" A) l! C4 @( Q
  3.   extern uint32_t SystemCoreClock;5 ^% y% L( X! H  q; K/ G, o
  4. #endif
复制代码
  `# d6 q0 w( M/ ]0 w* n
+ e; P, K% d" @; c! `0 x# a
之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。
3 m# I  ~$ ^. u0 {' M3 ]
微信图片_20231019154632.png

! ?  Y: F. ?' I8 j; l* N我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)
% P8 @( P) }0 J2 n% ]3 B4 U
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数

( {" @4 v4 r7 L, b( e$ t3 o# h# I. e; ~: n4 n, n- b! O6 H, H& O3 h
微信图片_20231019154629.png
$ Z. \. L0 \  [9 X
将对应的构造函数值改为0即可关闭这些构造函数。8 q2 h. R: |" B2 h4 R# I" e
- y7 E2 s8 k3 r) `; K! g! }  K

1 }7 {8 z6 A( Z. ]# Q- ?0 P/ N
微信图片_20231019154626.png

% p' F/ E+ C0 v: s这样子我们的编译就没问题啦7 V2 b3 G% T0 d4 E0 x1 _6 n
微信图片_20231019154620.png
' m! H* f3 p5 I7 C( Z
转载自:电路小白
如有侵权请联系删除

7 t& M1 I5 [& I& z
0 x/ M' G$ S$ P7 a0 K5 l  u

7 V4 N, c2 t! P# E3 L1 i% X6 h
赞 收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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