其实从很早之前就想学实时操作系统(RTOS)了,但是一直没有时间去学,以前使用STM32单片机一直停留在逻辑开发以及前后台系统,而真正被广泛使用的则是RTOS。( w# M6 d: o0 U- g: L" M
前后台系统则是我们常用的,使用一个主循环+许多的调用函数这些构成了后系统,利用中断进行异常处理则是前系统。而RTOS则是将任务按照优先级排列,优先进行优先级高的任务例如单片机内如的中断服务函数。; v9 i9 X5 s; \" `# j( Y
操作更加的灵活方便,也是嵌入式软件工程师必备的技能之一。0 p" P+ g& S$ N9 p# x 而FreeRTOS顾名思义,开源且免费,是我们小白入门的不二之选。 0 ~9 Z# W$ Z' q5 }& v' u 安装FreeRTOS 某度上搜索FreeRTOS,点入FreeRTOS的官网,进入下载第一个安装包(包含源码)& D8 f e i/ T: T P
下载好源码后,我们利用CUBEMX创建我们的工程,我选择的是STM32F407ZGT6这块芯片,之后将我们的下载的RTOS中的Source文件夹拷贝到我们利用CUBEMX创建的工程目录中。
其中的portable文件夹中只需保留以下文件即可,在工程中,我们将这些文件夹的内容全部添加到工程内(MemMang中的文件是实施方法,众多的heap文件我们只需要添加一个即可),并从之前FreeRTOS的源码中找到Demo文件夹,找到我们对应的单片机的文件夹。将FreeRTOSConfig.h文件即配置文件拷贝入我们的工程目录,这样子即可完成工程模板的创建。
之后我们编译工程,会发现有关于系统时钟的报错,没有SystemCoreClock的定义。. P4 t* h( W {- J' |5 y& n 0 _; o2 n: l7 S
我们在FreeRTOSConifg.h文件中找到44行,发现这个定义是并不是在MDK这个平台使用的,我们将其进行修改,使之在MDK平台适用
+ e; P, K% d" @; c! `0 x# a 之后又爆出许多错误,如下所示主要是一些函数的重复定义,在heap文件之间的重复定义。3 m# I ~$ ^. u0 {' M3 ]
我们去这些文件中挨个注释掉这些重复的函数。(我上述是添加了好几个heap文件,实际上添加一个heap文件即可) % P8 @( P) }0 J2 n% ]3 B4 U 之后我们又遇到了几个报错,这些报错主要是在FreeRTOSConfig.h中我们使能了几个构造函数,但是并没有定义这些构造函数,因此我们需要在FreeRTOSConfig.h中关闭这些构造函数 # h# I. e; ~: n4 n, n- b! O6 H, H& O3 h
将对应的构造函数值改为0即可关闭这些构造函数。8 q2 h. R: |" B2 h4 R# I" e - y7 E2 s8 k3 r) `; K! g! } K
这样子我们的编译就没问题啦7 V2 b3 G% T0 d4 E0 x1 _6 n
转载自:电路小白 如有侵权请联系删除 |
《STM32CubeMX2 实战课程》学习笔记5+CubeMX2生成的Uart初始化代码中没有使能
《STM32CubeMX2 实战课程》学习笔记4+FreeRTOS中的SysTick错误及改正
使用stm32C542做的低功耗密码锁示例
《STM32CubeMX2 实战课程》学习笔记1+由MX2生成MDK5项目并打开
《STM32CubeMX2 实战课程》学习笔记3.+sleep/stop/standby低功耗模式的入口
《STM32CubeMX2 实战课程》学习笔记2+MX2生成的MDK5工程中添加已存在文件(*.c / *.h)
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
微信公众号
手机版