12 2023 档案
摘要:示例源码基于FreeRTOS V9.0.0 递归锁 1. 概述 递归锁是特殊的互斥量,允许同一任务多次获取和释放锁,而不会造成死锁; 获取和释放的次数必须相同; 递归锁的实现依赖于内部的uxRecursiveCallCount变量,它标记递归的次数,每次上锁加1,每次解锁减1,减为0才真正释放锁;
阅读全文
摘要:示例源码基于FreeRTOS V9.0.0 互斥量 1. 概述 互斥量用于临界资源的保护,通过互斥量,多个任务对相同资源进行的访问操作是互斥的; 互斥量的核心在于谁上锁,就由谁解锁,这只是约定,FreeRTOS并没有在代码上实现这一点; 互斥量是一种特殊的信号量,也是一种特殊的队列; 使用互斥量,需
阅读全文
摘要:1、示C++为一个语言联邦 C++是个多重范型编程语言(multiparadigm programming language),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(me
阅读全文
摘要:示例源码基于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
阅读全文