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

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

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

, g7 P  M" p+ v2 m: @3 p前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。
  F/ Z1 B, E& }4 X. l0 R
微信图片_20231019154701.png

. h# G- t1 U* e操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。% R- N2 k7 v1 g  o9 C
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。
+ t  D  y9 y; p7 D- a& O1 C9 N  u+ `+ D* k  F4 v  Z
安装FreeRTOS& w: g$ D: f. c" U, f
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)
9 |5 t0 @/ `( n" {1 o
, }+ T5 b! P( U$ Y; U9 z( J
微信图片_20231019154657.png

0 D& L& w/ B; b% F: w2 L$ e. E
微信图片_20231019154652.png
* H) z) T4 P; ?7 r+ O3 n; J
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png
3 L+ j  `1 x1 M" X" b
其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。
' R& f8 M+ _1 j/ G4 M
微信图片_20231019154646.png
4 K. ^8 y7 V& f3 I
微信图片_20231019154642.png

. R& \" g$ v; v2 T之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。
" X6 t7 S4 p+ C* t: r- u( E( v4 f( b. ]
微信图片_20231019154638.png
% _' r  E. d& H& P5 I
微信图片_20231019154636.png
) c/ V$ v! X8 G4 k/ l
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)
    " c- A9 n! g+ x/ h- Y" }* @
  2.   #include <stdint.h>
    # s" B: Q  h6 I- B0 S; {
  3.   extern uint32_t SystemCoreClock;. t9 E1 T  e! \$ R2 j1 J7 p* w5 p# A
  4. #endif
复制代码

# `8 o$ Y  D0 B( ^" _5 m

* \2 K  Y) V) Q/ l8 V之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。
; ~4 v3 B  v' v6 u
微信图片_20231019154632.png

& |6 Z8 b" {4 a  I我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)
* ?2 I4 s1 R( w9 U
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数

' o1 c2 Q, Y( k  i" l$ V2 M) D* `/ ?3 I( j' k5 L
微信图片_20231019154629.png
, [) u6 U8 u! w8 W
将对应的构造函数值改为0即可关闭这些构造函数。
9 F' T# Z- N/ ]( t& z  M; \5 k

# c; i  ^  g5 }1 x: g$ A; b6 O# M# n8 Y# W- U
微信图片_20231019154626.png
; p- N+ L+ F( {
这样子我们的编译就没问题啦# n3 E; g' C1 p/ y
微信图片_20231019154620.png
* y. c# g) W+ L! r
转载自:电路小白
如有侵权请联系删除

4 L# X  R6 _5 [+ X
! ~( k8 b4 P2 E
4 k3 U9 O2 M6 y3 C" F
收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版