FreeRTOS基于STM32单片机

FreeRTOS

  • FreeRTOS
    • 一丶FreeRTOS基础部分
    • 二丶裸机开发 与 FreeRTOS
      • 分时复用,实现多任务
      • 原理
    • 三丶快速移植FreeRTOS
      • CubeMX快速移植步骤
        • CubeMX快速移植时注意打开串口
      • 检测是否移植成功
      • 一些常见问题
      • FreeRTOS系统详细配置选项卡
        • 具体配置
        • 内核配置翻译
        • 参考博文
    • 四丶任务的创建与删除
      • 任务的含义
      • FreeRTOS提供任务创建相关函数
      • FreeRTOS提供任务删除相关函数
      • xTaskCreat 函数解读
        • 函数体
        • 返回值
      • 官方案例解读
        • 1.void vTaskCode
        • 2.该函数里面的参数
      • 返回值是否等于pdPAS.
    • 五丶动手实操进行任务的创建
      • 创建任务步骤
      • 验证任务的实验现象
      • 分析代码
        • main.c
        • freertos.c
    • 六丶任务调度
      • 工作中:用时间片任务调度
      • 任务调度
        • 被封装的任务调度器
      • 任务调度规则 3条
        • 第一条:抢占式任务调度
          • 阻塞
          • 就绪态
        • 第二条: 时间片调度
          • 阻塞注意事项
        • 第三条:协程式调度
    • 七丶任务的状态 4种
      • 运行态
      • 就绪态
      • 阻塞态
      • 挂起态
        • 任务的挂起与恢复函数
      • 四态转化过程
        • 转化一
        • 转化二
        • 转化三
        • 总结:只有 就绪态能到 运行态
    • 八丶任务小实验
      • 具体步骤
      • main.c文件中的入口函数里实现业务逻辑
        • 按键消抖
        • 防止按键刷屏,仅让按键扫描一次
        • 句柄
          • 删除任务,手动句柄置NULL
      • 业务实现
        • 创建进程与删除进程实现
        • 任务正常运行或者任务挂起状态实现
          • 状态标志变量
    • 九丶任务 入口函数 绑定 任务创建函数
      • 四者之间联系
      • 串口printf要勾选MI库
    • 十丶队列
    • 传递信息的方法
      • 方法一: 全局变量(不使用)
        • “兔子—狐狸—树懒”模型
      • 方法二 :消息队列(流水线)
    • 队列基本知识
      • 创建队列时,需要指定内容
        • 队列项目和队列长度
      • 队列的特点
        • 数据入队方式(FIFO或者LIFO)
        • 数据传递方式(实值传递或者指针传递)
        • 可被多任务访问(被多任务或者中断访问)
        • 出队丶入队阻塞(即无法入队时的等待时间)
    • 十一丶队列API 3种
      • 创建队列函数,得到队列句柄
        • 需指定项目大小和队列长度
        • 函数分析
      • 写队列函数 与 读队列函数对比
        • 不同
        • 相同
      • 写队列函数
        • 第一部分普通写队列
          • a部分 头部,常用
          • b部分 尾部,不用
          • c部分 覆写
        • 第二部分是中断中写队列fromisr
      • 写队列函数举列
      • 读队列函数
        • 第一部分普通写队列
          • 读出来删除消息
          • 读出来不删除消息peek
        • 第二部分中断读队列
    • 十二丶队列API 实操
      • 创建任务
      • 创建队列
        • 创建队列需指定两个信息
    • 十三丶信号量semaphore
    • 十四丶二值型信号量
    • 十五丶计数型信号量
      • 回顾二值信号量
      • 计数型信号量
        • 停车位-指示牌模型
        • 信号量 == 资源指示灯
      • 计数型信号量相关API
        • 创建信号量
          • 参数解释
        • 获取信号量计数值函数
      • 计数型信号量实操
        • 1.利用CubeMX进行实操
        • 2.打开Timers and semaphers 定时器和信号量
        • 注意提前打开使能计数型信号量
        • 3.创建计数型信号量的卡片解释
        • 4.Project项目代码分析
      • 二值信号与计数型信号量总结
        • 都是队列
        • 创建函数不同
    • 十六丶互斥型信号量Mutex 不用于中断
      • 同步
      • 资源保护
      • 优先级翻转
        • 情景一
          • 总结
        • 情景二
          • 总结
      • 解决优先级翻转,引入互斥型信号量
        • CPU同时只允许同时做一件事情
        • 老二为什么不能打断小弟呢?
        • 只是缓解优先级翻转
      • 互斥型信号量
        • 优先级继承
        • 只能缓解中优先级抢占任务
          • 解决
          • 缓解
      • 互斥型信号量的缓解与解决 (重要)
      • 互斥型信号量API
      • 二值型信号量与互斥型信号量对比
        • 最大区别:后者可缓解优先级翻转
    • 十七丶互斥型信号量任务实操
      • 任务一:优先级翻转
        • 第一步,创建3个任务
          • 第一个任务TASK-H 设置成高优先级
          • 第二个任务 正常优先级
          • 第三个任务 TASK-L
        • 第二步,创建二值型信号量
      • 分析任务一的Project
        • 1.创建了一个二值信号量
        • 2.创建任务对应的入口函数
        • 3.入口函数里实现业务逻辑
          • 3.1低中断优先级任务
          • 3.2高中断优先级任务
          • 3.3中间优先级任务(不占用厕所,只占用CPU资源。高与低任务都要抢占厕所)
        • 4.通过串口观察Project现象 中优先级会打断低优先级
        • 5.信号量与资源
      • 任务二:优化优先级翻转
        • 删除二值型信号量 Timers and semaphers
        • 创建互斥型信号量 mutex
      • 分析任务二的 Project_mutex
        • 1.创建互斥型信号量函数 初有小球
      • CubeMX封装的函数
        • 二值型信号量 盒子无小球
        • 互斥型信号量 盒子有小球
    • 十八丶互斥型信号存在意义
      • 互斥型信号量实验验证
      • 带有信号量的低优先级任务 不被中优先级任务打断。
      • 深入理解互斥量的优先级继承的优点
    • 十九丶事件标志组
      • 事件标志位
      • 事件标志组
        • configUSE_16_BIT_TICKS宏定义16位/32位
        • 最多可存储24个事件状态。
      • 事件标志组API函数
        • 1.创建一个事件标志组
        • 2.设置事件标志位
        • 3.清除事件标志位
        • 4.等待事件标志位
          • 参数四解释
      • 事件标志组实操
        • 1.创建任务和配置GPIO
        • 2. 创建事件标志组函数
          • 利用CubeMX配置
          • 利用手动写代码实现
        • 3.手动实现创建标志组函数
          • .创建一个事件标志组句柄
          • 在freertos_Init里创建一个事件标志组
        • 4.在任务一和任务二入口函数里面实现业务逻辑
          • 任务一
          • 任务二
        • 任务二就是等待事件标志函数的应用
          • 参数
          • 返回值 由2进制得到,16进制显示
      • 注意点
        • 多个事件的对应标志位,置1后的按位值
          • 最后一位置1指令,不是位置!
          • 最倒数第二位 置1指令,不是位置
        • 等待事件标志函数的返回值
          • 二进制得到 16进制显示

FreeRTOS

FreeRTOS资料源码直接去官网下载。
1.学习FreeRTOS需要有C语言基础STM32基础
2. FreeRTOS操作系统,轻理论,主要是重动手实操。即多写代码,多做项目。

一丶FreeRTOS基础部分

a.为什么要学习FreeRTOS?
1.单片机裸机开发钱少,FreeRTOS更加有钱途。
2.有FreeRTOS基础学习LIinux帮助十分大。因为操作系统是相通的,知识点是相似的。

b.为什么选择FreeRTOS?
1.FreeRTOS是免费的。
2.WIFI,蓝牙等模块芯片产商以FreeRTOS作为操作系统天
3.简单且小巧,该系统文件数量少

c.FreeRTOS介绍?
Free:免费
RTOS(Real time operating system):;实时操作系统
1.FreeRTOS不是实际上的实时操作系统而是分时复用的。
1.RTOS是一类操作系统,不是一个。uc/OS,FreeRTOS,RT-Thread这些都属于RTOS。
2.轻量级操作系统,代码量很少的操作系统。但功能有:任务管理,时间管理,信号量,消息队列,内存管理,记录功能,软件定时器器,协程等
3.RTOS主要占据RAM系统资源,小RAM单片机上运行。
4.FreeRTOS是免费的,可移植的,可裁剪的

二丶裸机开发 与 FreeRTOS

FreeRTOS基于STM32单片机_第1张图片

游戏和女朋友不可同时兼得。但可以玩1秒游戏,陪女朋友1秒,但把人累死。
而CPU是无情战斗机器,两个或者多个任务间快速切换,CPU从而实现两者兼顾。

分时复用,实现多任务

以前老电影:一帧图片一帧图片的放,但大脑里是连冠的电影。
CPU而言,每个任务都是独立运行的,互不影响,切换频率很快,像同时运行一样。


原理

1.FreeRTOS实现多任务的原理:该系统不是实时操作系统而是分时复用的。即把时间分成很多时间片,轮流去执行每一个任务。
把时间分成一片一片的,即时间片。由于切换频率很快,导致认为是同时运行。
2. 即一句话理解:很短时间内,同时实现多个任务,但实际上是分时复用的,切换频率高,察觉不到罢了。
3

三丶快速移植FreeRTOS

1.作为新手只需要掌握快速移植FreeRTOS到单片机上面,工作需要的话,才去学习手动移植。
移植FreeRTOS移植到STM32单片机上的方法有两种。
方法一:手动移植,特别的复杂 手动移植,参考博文

你可能感兴趣的:(单片机,stm32,嵌入式硬件,mcu,51单片机)