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

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

[复制链接]
攻城狮Melo 发布时间:2023-10-19 15:47
其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。! ]$ ]. o2 o+ B3 Z$ E4 c8 u$ [8 ~
微信图片_20231019154705.png
6 Z: O/ h; E: m  f6 i
前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。" q$ w( d7 S( K9 I1 B9 u3 L- B" N
微信图片_20231019154701.png
; y, F" q' U: ^
操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。
4 g0 s8 k" _6 u( I$ D. d7 h
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。0 h" y) z, c" y: Q" ~! [5 y
6 G# K8 l- h9 ^/ I
安装FreeRTOS
5 |0 T- Z' O0 s* s
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)* d/ O6 V& G- G7 q- n3 N( M6 C, X

2 H- [0 a; ?. T1 E+ w
微信图片_20231019154657.png

7 r7 `! Z) C& T3 k; h* k
微信图片_20231019154652.png
1 X7 i! P8 O8 A5 x" N. G
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png
- Z) x3 l( L  t" C( z+ j6 a
其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。
5 H3 s; l6 t$ d; E' _
微信图片_20231019154646.png

. _9 r2 i: P- _% C' D4 s
微信图片_20231019154642.png

; Y, [8 {; r) X/ O之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。
% ^5 Z$ ~! }. _  O" V, n2 l( N6 ^+ v* g& ]
微信图片_20231019154638.png

1 ^0 E$ g* l+ T. g8 L& r; g
微信图片_20231019154636.png

, K8 G; K6 J( o2 e/ f
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)9 t+ X) g# A2 L/ ^( H0 h
  2.   #include <stdint.h>
    7 i$ O1 N8 ]" u: S. \
  3.   extern uint32_t SystemCoreClock;+ R- {2 v$ e! l1 D% {( I8 ~
  4. #endif
复制代码
+ v7 \$ z2 d1 B. C

  k8 v! c! V$ R, ^- O- k  ^之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。
, _1 h- Y, Y( _8 T5 h* m
微信图片_20231019154632.png
9 t. H& e6 V; ?/ M
我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)
' S3 P0 R& f) A: L! f- j
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数

/ M* I  o  z; l' ^( y' L" b$ n3 a0 A& E3 Q% L: M4 U2 K
微信图片_20231019154629.png
/ b! j8 Y2 }, Z4 Z8 T* b4 k
将对应的构造函数值改为0即可关闭这些构造函数。- B* Y+ B( y. {+ L* n3 _5 P

& a8 m( ~# F$ l$ t; r- u5 S# ^; o1 I/ G& G: T' K2 V, m4 Z4 s6 \! _. i
微信图片_20231019154626.png

7 X8 Q: @$ M6 d& F  A3 T这样子我们的编译就没问题啦# `7 j& ^) F4 x7 R- A2 o# y
微信图片_20231019154620.png
2 K# J+ {' K( ]1 K: F/ @
转载自:电路小白
如有侵权请联系删除
4 G4 P! b; V3 x5 v, J; C
& b" N. {, B! S, E' n

5 n3 E( {+ N# E7 U& T( u' X
收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版