随笔分类 - FreeRTOS笔记
摘要:示例源码基于FreeRTOS V9.0.0 软件定时器 1. 概述 软件定时器用来在未来某个时间点执行某个动作,或者周期性地执行某个动作;软件定时器的实现依赖于系统滴答中断。 2. 设计原理 定时器分为单次定时器和周期定时器,定时时间到执行注册的回调函数。单次定时器触发后即睡眠(不会销毁,依旧可以操
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 事件组 1. 概述 FreeRTOS事件组,是任务间同步的一种方式。它基于bit map实现,所谓的事件组,即一个整数。整数中的每一位代表着一个事件,bit为1时表示事件发生,bit为0表示事件未发生; 事件触发可以由任务触发,也可以由中断服务触发,触发时
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 任务通知 1. 概述 任务通知是也是RTOS中任务通信的一种方式,区别于队列,信号量,事件组等,它不使用额外的结构体作为通信内容; 基于任务通知,可以实现轻量级的队列(长度为1)、邮箱(覆盖的队列)、计数型和二值信号量、事件组; 2. 特性 2.1 劣势
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 任务调度 1. 概述 在FreeRtos中任务切换的本质是函数调用,CPU在指定时间内执行不同的函数,从微观上看每个任务都是顺序执行的,但是CPU运算能力很强,可以在很短时间内完成指令的执行,从宏观上看每个任务相当与同时在执行。 调度算法是决定 哪个 RT
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 递归锁 1. 概述 递归锁是特殊的互斥量,允许同一任务多次获取和释放锁,而不会造成死锁; 获取和释放的次数必须相同; 递归锁的实现依赖于内部的uxRecursiveCallCount变量,它标记递归的次数,每次上锁加1,每次解锁减1,减为0才真正释放锁;
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 互斥量 1. 概述 互斥量用于临界资源的保护,通过互斥量,多个任务对相同资源进行的访问操作是互斥的; 互斥量的核心在于谁上锁,就由谁解锁,这只是约定,FreeRTOS并没有在代码上实现这一点; 互斥量是一种特殊的信号量,也是一种特殊的队列; 使用互斥量,需
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 信号量 1. 概述 消息队列用于传输多个数据,但是有时候只需要传递状态,这个状态值需要用一个数值表示,在这种情况下我们只需要维护一个数值,使用信号量效率更高、更节省内存。 信号量用来表示资源的个数,它是特殊的队列实现,队列数据项为空。 对于二值信号量,队列
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 队列集 1. 概述 队列集的本质也是队列,只不过里面存放的是“队列句柄”。 当任务需要及时读取多个队列时,可以使用队列集。它类似于posix的多路复用思想。可以将想要监听消息的队列放入队列集中,当其中有队列有数据达到时,队列集的接口会返回可读的队列句柄,用
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 邮箱 1. 概述 一种特殊的队列,队列深度只有1,写数据的时候是覆盖写,读数据的时候,读完不会把数据从队列删除; 写数据的时候永远是成功的,读数据的时候仅第一次队列无数据时会阻塞或失败,当队列有数据后,读都会是成功的; 2. 接口API // 写队列 #d
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 队列 1. 概述 FreeRTOS的队列,支持任务与任务间的通信,以及任务与中断间的通信。它是FreeRTOS系统中主要的任务间通信方式。 队列内的消息,是通过拷贝方式传递,而非指针。 队列除了基本的先进先出特性,也支持往队列首部写入数据。 FreeRTO
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 链表 1 概述 链表一般可分为单向链表、双向链表、环形链表。FreeRTOS采用的是环形双向链表设计; 单向链表只有后继节点,双向链表有后继和前驱节点; 链表的目的是把元素串联,其设计方式一般有两种: 将元素放置在链表结构体中; 将链表结构体放置在元素中;
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 内存管理 1 概述 FreeRTOS 有自己的一套内存管理机制,而非直接使用malloc和free等C库函数。 malloc和free由于实现复杂,代码量大,运行时间不确定,存在内存碎片,非线程安全等问题,不适用于资源紧缺的FreeRTOS系统; Free
阅读全文