摘要: 优先级翻转实验以及分析现象 优先级翻转指的是高优先级的任务反而慢执行,低优先级的任务反而优先执行。优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。 上图中三个任务的优先级的顺序为H>M>L,L 获取信号 阅读全文
posted @ 2024-05-02 20:49 Bathwind_W 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 信号量常用于控制对共享资源的访问和任务同步。 其中控制共享资源可以从停车场的例子去理解。比如现在这个停车场最大容量为100。这个100就是共享资源。假如要把车停进去这个停车场,就需要查看当前停车场中的数量。当前的停车数量就是信号量。信号量的增加对应停车场的车开出停车场。信号量减少代表新的车进入了停车 阅读全文
posted @ 2024-05-01 17:05 Bathwind_W 阅读(50) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS队列 在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息就会涉及到“资源管理”的问题。 阅读全文
posted @ 2024-04-20 18:24 Bathwind_W 阅读(99) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS时间管理 主要要了解延时函数: 相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。 绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务。 函数 vTaskDelayUntil()是绝对模式(绝对延时函数)。函数 vTa 阅读全文
posted @ 2024-04-16 21:10 Bathwind_W 阅读(162) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS任务切换学习 所谓任务切换,就是CPU寄存器的切换。假设当由任务A切换到任务B时,主要分为两步: 1:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场; 2:将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场; 对任务A 阅读全文
posted @ 2024-04-10 22:11 Bathwind_W 阅读(87) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS启动任务调度器 这部分内容就要去深入了解源码以及熟悉汇编语言的操作。依旧正点原子的视频。下面首先看开启任务调度器这部分源码: 1开启任务调度器 任务调度器用于启动任务调度器,任务调度器启动后, FreeRTOS 便会开始进行任务调度。 下面进入工程查看RTOS的源码: 1 创建空闲任 阅读全文
posted @ 2024-04-09 22:20 Bathwind_W 阅读(246) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS列表和列表项 今天继续跟着正点原子学习FreeRTOS列表和列表项的内容。列表和列表项这个知识点用到了C语言链表的知识点。所以必须对C语言中的链表这个数据结构才能更好的理解这部分内容。TIPS:正点原子这节课内容讲的特别好,强烈推荐:第20讲列表和列表项简介 什么是列表和列表项 列表 阅读全文
posted @ 2024-04-07 22:05 Bathwind_W 阅读(239) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS临界段代码保护和任务调度器的挂起与恢复学习 临界段代码保护 所谓临界段代码保护就是指必须完成运行,不能被打断的代码段。比如需要严格按照时序除初始化的外设:IIC、SPI,再或者因为系统自身需求和用户需求。 FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再 阅读全文
posted @ 2024-04-04 15:53 Bathwind_W 阅读(296) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS中断管理以及实验 继续记录学习FreeRTOS的博客,参照正点原子FreeRTOS的视频。 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级配置寄存器 , STM32寄存器中并且这个寄存器只使用[7:4],所以具体表达优先级的位数如下图 阅读全文
posted @ 2024-04-03 21:14 Bathwind_W 阅读(90) 评论(0) 推荐(0) 编辑
摘要: FreeRTOS 任务挂起和恢复API函数使用 挂起的作用就是当我们需要暂停某任务时候,等过一段时间在运行,这个时候要是使用删除和重建的方法就会当时任务进行时候的变量保存的值。当需要将这个任务停止运行一段时间的将这个任务挂起,当重新进行运行这个任务就恢复运行。 vTaskSuspend()//挂起一 阅读全文
posted @ 2024-04-01 21:28 Bathwind_W 阅读(207) 评论(0) 推荐(0) 编辑