IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32CubeMx移植freertos系统,简单的双线程工作 -> 正文阅读

[嵌入式]STM32CubeMx移植freertos系统,简单的双线程工作

对于初学者,只需要知其然就可以,不需要深究底层逻辑。等用熟了,有些概念了,再来深究会好很多。

使用CubeMx 移植FreeRTOS,比较简单。

一、新建工程

只需要把这里勾上就OK了,其它都是常规配置,记得把时钟配置上,我这里添加了一个串口,用于测试演示,LED都懒得配置了。(不同版本的cubemx界面可能有些不同,这里不一一展示,直接添加freertos,软件版本选择cmsis v1即可)

直接点击生成,发现有警告:
在这里插入图片描述

是说FreeRTOS和HAL库的时钟源由冲突,然后强烈建议我们把时钟源改为其它的,既然这么强烈建议,那我们就改呗!

其实也可以不改,先直接用。

改好之后就可以生成代码了

二、测试程序

1、先不管程序怎么写,先看看官方的代码是怎么整的
在这里插入图片描述

130行的注释告诉我们,131、132定义并且生成了一个默认任务(StartDefaultTask);

135的注释又告诉我们在此处添加队列

139,添加队列

144,看函数名称是说启动内核

146,我们永远不会到达这里,因为有调度器(scheduler)的控制

一大堆乱七八糟的新名词,先不管,看看怎么写测试代码在说。

2、分析

FreeRTOS是多任务系统,我们要写代码,其实就是要增加任务,那怎么增加任务呢?

刚好例程给了我们一个默认任务,看看它是怎么添加的,直接全局搜索一下这个默认任务(StartDefaultTask)

发现源代码就在这里:
在这里插入图片描述

什么都没有,就只有一个延时函数,那就依样画葫芦呗,直接复制粘贴(记得printf的重定向弄好):

在这里插入图片描述

任务定义好了,那就添加任务呗!
在这里插入图片描述
编译一下就报错了!

说是os_thread_def_defaultTask重定义了,不过好像我们也没用到这个东西吖!全局搜索一下它!(全局搜索是个好东西吖!)

一查没有吖!找不到这个鬼东西,再查一下defaultTask,也TM找不到,没定义就使用的变量,没理由啊,难道我的C语言学错了???

C语言肯定没有不定义就可以使用的变量,这里的 defaultTask,根本就不是一个变量。

要弄清楚为什么这里可以使用defaultTask,那就要看看osThreadDef到底是个什么东西了:

osThreadDef不是个函数,而是个宏定义,它就是定义了一个名字叫 os_thread_def_##name 的osThreadDef_t类型的变量,并且把这个变量赋值了。

这里看起来这么复杂,我写简单点就可以看懂了:

osThreadDef的宏定义跟我写这个测试的宏定义其实差不多。

那os_thread_def_##name又是怎么回事?那就要知道“##”和“#”的用法了,两个都是预编译的命令:

1、##是把宏参数合并到前面的一个字符

2、#是把宏参数直接转换为字符串

可以测试一下:
在这里插入图片描述

可以看到,我从来就没有定义过一个变量叫ABCDEFGH,或者a0的变量,但我的程序却可以完美的运行!

认真看看##和#的作用,这就是预编译+宏定义的魅力了(是不是有学到了,哈哈)

清楚了##和#的作用后,我们就知道了,编译后错误警报说是os_thread_def_defaultTask重定义了,就是因为这个东西作祟,所以,我们改一下:

在这里插入图片描述

编译,通过了!有两个警报:

这两个变量,就是osThreadDef这个宏定义里面帮我们定义了的变量。

既然运行通过,那就烧录代码看看呗!

结果懵了,为何没东西输出呢?查了一下,printf是正常的,那么是怎么回事呢?

想想那两个警告,没道理说这两个变量没使用吖,根据复制后的对应原则,检测一下代码,发现问题了
在这里插入图片描述

原来是后面的忘记改了,这下编译一下,居然两个警告没了,看看这个osThread是何方神圣?

原来也是个宏定义,而且也用了##,还是个引用,这下知道为何两个警告没了,就是因为这里使用了它们

好了,终于可以下载程序了!下载看看:

在这里插入图片描述
只有任务1,任务2呢???
请听下回分解

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:36:15  更:2021-10-13 11:36:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:33:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码