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

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

[复制链接]
攻城狮Melo 发布时间:2023-10-19 15:47
其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。
- |; W: g: L3 I2 Q$ m8 R
微信图片_20231019154705.png
: _, |% ~8 k  |' |+ W) T0 @4 n
前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。
* O9 ]. a3 M+ `! t
微信图片_20231019154701.png

  n4 V* C. B8 b( T  l操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。, h- P; C' L  e# g% p4 F3 H
而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。
8 P( N; a: h6 w1 T- }2 i4 h0 B& G, c
4 H9 l! ^5 l/ c4 k  K+ J
安装FreeRTOS/ N: n& j, J) w$ a
某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)( _4 Y( g" s) |) {7 p1 F
1 z% j) O6 ]( [. `- B& D* A9 v, O3 j
微信图片_20231019154657.png
* y* ]* E1 |/ V' K6 ^  D
微信图片_20231019154652.png
* f6 m0 z" n& N5 z
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
微信图片_20231019154649.png

/ d1 B, W/ }$ f' q- a其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。; X( \$ L$ w( F
微信图片_20231019154646.png

6 c7 N. M$ p0 }
微信图片_20231019154642.png
- N3 d9 h$ F# [: P" t7 q
之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。
, J* i' N3 P1 H; S- F
5 Y( v0 T: ?( f: t9 E
微信图片_20231019154638.png

: k% @/ A. v- E2 y2 k% ?8 X! Y  D9 ^* B
微信图片_20231019154636.png

) Y4 k+ D, P5 S( @2 t; Y3 z
   我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
  1. #if defined(__ICCARM__) || defined(__CC_ARM) ||defined(__GNUC__)$ s8 x( f" ^6 V3 I! y
  2.   #include <stdint.h>/ r0 N3 _  U3 `8 q+ l$ g
  3.   extern uint32_t SystemCoreClock;
    " I. J: O: {" Y9 c) q# i
  4. #endif
复制代码

7 B2 M$ \& o) q* e/ Y
2 K0 o6 g# `3 B# e, Z1 q
之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。

3 ^1 e5 g1 A% I4 d0 t' w8 l
微信图片_20231019154632.png
/ ^6 F% |8 B  Q1 y: p- q7 Y: U) f% F  s: {
我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可)
" S$ _$ {) @9 a1 ~5 K  C
之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数

+ F& K4 z7 k% X6 K/ N  w' g4 R8 }- {" _
微信图片_20231019154629.png

# W0 t* ]# a. U9 b7 y  l9 s0 A将对应的构造函数值改为0即可关闭这些构造函数。
' p0 l1 s+ M8 K9 V3 H4 I

" F3 ?3 A6 \5 K( n! s  w3 O* S& M8 m$ I( x! R) k
微信图片_20231019154626.png
8 r% e! `" w0 h' a  r# ^
这样子我们的编译就没问题啦( C1 Z7 ]% e$ R/ o0 ^/ `
微信图片_20231019154620.png
) {- b7 w% Z1 }7 F
转载自:电路小白
如有侵权请联系删除
! u  S* P8 r% ^: G, B2 A
; {. o4 p3 c: \; L( O) |- B) w  y

+ A, }* N- k& p
收藏 评论0 发布时间:2023-10-19 15:47

举报

0个回答

所属标签

相似技术帖

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