
FreeRTOS
文章平均质量分 83
FreeRTOS实时操作系统
Tree-gg
半仙卖苹果
展开
-
21_FreeRTOS内存管理
自动地从 FreeRTOS 管理的内存堆中申请创建对象所需的内存,并且在对象删除后可将这块内存释放回FreeRTOS管理的内存堆。因此heap_2内存管理算法不可避免地会产生内存碎片。但是 heap_5 内存管理算法在heap_4内存管理算法的基础上实现了管理多个非连续内存区域的能力。内存碎片是由于多次申请和释放内存,但释放的内存无法与相邻的空闲内存合并而产生的。heap_5内存管理算法是在heap_4 内存管理算法的基础上实现的。heap_4内存管理算法会把相邻的空闲内存合并为一个更大的空闲内存。原创 2023-02-28 21:54:11 · 881 阅读 · 0 评论 -
20_FreeRTOS低功耗模式
将在二值信号量源码中,加入低功耗模式,最后对比这个两个实验的功耗结果,观察Tickless模式对于降低功耗是否有用。此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够。FreeRTOS也提供了一个叫Tickless的低功耗模式,方便带FreeRTOS操作系统的应用开发。Tickless低功耗模式的本质是通过调用指令WFI实现睡眠模式。使用内核指令WFE指令进入睡眠模式,唤醒睡眠模式唤醒事件。此宏用于定义需要在系统进入低功耗模式前执行的事务。原创 2023-02-26 14:56:38 · 1093 阅读 · 0 评论 -
19_FreeRTOS软件定时器
软件定时器介绍定时器描述:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期。硬件定时器描述:芯片本身自带的定时器模块硬件定时器的精度一般很高每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。软件定时器是指具有定时功能的软件可设置定时周期当指定时间到达后要调用回调函数也称超时函数),用户在回调函数中处理信息。软件定时器优点:1.硬件定时器数量有限,而软件定时器理论上只需有足够内存,就可以创建多个。2.原创 2023-02-25 21:15:09 · 1536 阅读 · 0 评论 -
18_FreeRTOS任务通知
任务通知的简介任务通知用来通知任务的任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。使用队列、信号量、事件标志组时都需另外创建一个结构体通过中间的结构体进行间接通信!使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收别人发过来的"通知"任务通知值的更新方式不覆盖接受任务的通知值覆盖接受任务的通知值更新接受任务通知值的一个或多个bit增加接受任务的通知值。只要合理灵活的利用任务通知的特点可以在一些场合中替代队列、信号量、事件标志组。原创 2023-02-23 21:25:52 · 720 阅读 · 0 评论 -
17_FreeRTOS事件标志组
虽然使用了32位无符号的数据类型变量来存储事件标志,但其中的高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,所以说一个事件组最多可以存储24个事件标志!每一位事件的含义,由用户自己决定,如: bit0表示按键是否按下, bit1表示是否接受到消息.同时等待事件标志组中的多个事件位,当这些事件位都置1的话就执行相应的处理。根据不同键值将事件标志组相应事件位置一,模拟事件发生。事件标志位:用一个位,来表示事件是否发生。事件标志组是一组事件标志位的集合。它的每一个位表示一个事件。原创 2023-02-21 21:19:55 · 579 阅读 · 0 评论 -
16_FreeRTOS队列集
一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集。此函数用于从队列集中移除队列)要注意的是,队列在从队列集移除之前,必须没有有效的消息。用来创建其它任务,并创建队列集,队列/信号量,将队列/信号量添加到队列集中。此函数用子在任务中获取队列集中有有效消息的队列。此函数用于往队列集中添加队列。获取队列集中有有效消息的队列。往队列集中添加队列或信号量。往队列发送信息或释放信号量。队列在被添加到队列集之前。此函数用于创建队列集。队列中不能有有效的消息。原创 2023-02-20 21:54:49 · 907 阅读 · 1 评论 -
15_FreeRtos计数信号量优先级翻转互斥信号量
优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的但是在实时操作系统中是不允许出现优先级翻转的因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。在使用二值信号量的时候经常会遇到优先级翻转的问题。举例:任务H 优先级最高 任务M优先级中等 任务L优先级最低假设。原创 2023-02-18 17:35:16 · 605 阅读 · 0 评论 -
14_FreeRTOS二值信号量
信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。假设有一个人需要在停车场停车1.首先判断停车场是否还有空车位(判断信号量是否有资源)2.停车场正好有空车位信号量有资源),那么就可以直接将车开入空车位进行停车(获取信号量成功);3.停车场已经没有空车位了(信号量没有资源) ,那么这个人可以选择不停车(获取信号量失败);也可以选择等待任务阻塞其他人将车开出停车场释放信号量资源),然后再将车停入空车位。空车位:可以理解为信号量资源数(计数值)原创 2023-02-16 21:35:50 · 566 阅读 · 0 评论 -
13_FreeRTOS消息队列
队列是任务到任务任务到中断、中断到任务数据交流的一种机制消息传递类似全局变量?假设有一个全局变量a = 0现有两个任务都在写这个变量a假设在任务1完成2步骤修改数据的时候,此时任务2优先级高打断任务1,a还是0因为任务a还没有写数据,任务2执行了加1,在回到任务1时,下一步是执行写数据此时r0是任务2执行完时候的1,任务1在吧R0赋值给0,相当于r0等于1在给a,并没有等于2。这样就照成了数据的受损。全局变量的弊端数据无保护导致数据不安全当多个任务同时对该变量操作时数据易受损。原创 2023-02-13 23:15:04 · 1833 阅读 · 0 评论 -
12_FreeRTOS任务相关API函数
此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1。原创 2023-02-10 21:34:46 · 1141 阅读 · 0 评论 -
11_FreeRTOS时间片调度实验
同等优先级任务轮流地享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期。将设计三个任务:start_task、task1、task2,其中task1和task2优先级相同均为2。注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行。为了使现象明显,将滴答定时器的中断频率设置为50ms中断一次,即一个时间片50ms。Task2运行完一个时间片后,切换至Task3运行。Task1运行完一个时间片后,切换至Task2运行。原创 2023-02-06 21:23:21 · 703 阅读 · 0 评论 -
10_FreeRTOS任务切换FreeRTOSr任务调度整个过程
通过向中断控制和状态寄存器ICSR的bit28写入1挂起PendSV来启动PendSV 中断。(CUP的寄存器,因为正在运行的是任务A所以CUP的寄存器应该保存到任务A的任务推栈里面)对任务A保存现场,对任务B恢复现场,这个整体的过程称之为:上下文切换。就是把任务块的TCB开头的寄存器加载到CPU的R寄存器里面。注意:任务切换的过程在PendSV中断服务函数里面完成。任务切换的本质:就是CPU寄存器的切换。假设当由任务A切换到任务B时。并将此时任务A的寄存器。将任务B的各个寄存器值。这个过程叫做保存现场。原创 2023-02-05 17:19:33 · 945 阅读 · 1 评论 -
09_FreeRTOS任务调度器
是链接寄存器LR,在ISR中(此刻我们在SVC的ISR中) ,它记录了异常返回值EXC_RETURN而EXC_RETURN只有6个合法的值。2.通过任务的栈顶指针,将任务栈中的内容出栈到CPU寄存器中,任务栈中的内容在调用任务创建函数的时候,已初始化,然后设置 PSP 指针。中断产生时,硬件自动将xPSR, PC(R15), LR(R14), R12, R3-R。关闭中断,防止调度器开启之前或过程中,受中断干扰,会在运行第一个任务时打开中断。任务A的寄存器值,在一开始创建任务时就保存在任务堆栈里边!原创 2023-02-01 21:27:06 · 748 阅读 · 0 评论 -
08_FreeRTOS列表和列表项讲解
列表和列表项的简介列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。列表项就是存放在列表中的项目示意图:列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表。列表的特点列表项间的地址非连续的,是人为的连接到一起的。列表项的数目是由后期添加的个数决定的,随时可以改变。可以理解为列表就是就绪列表,列表项里面存的是某个任务就绪。数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变。原创 2023-01-29 22:11:23 · 967 阅读 · 0 评论 -
07_FreeRTOS任务调度器的挂起和恢复
PendSV的触发是在SysTick定时器中断里面触发的, xPortSysTickHandler()。3.挂起调度器的方式,适合于临界区位于任务与任务之间;既不用去延时中断,又可以做临界区的安全。饿任务之间的资源争夺,中断照样可以直接响应;vTaskSuspendAll()任务调度器挂起函数详解。1.与临界区不一样的是,挂起任务调度器,未关闭中断;xTaskResumeAll()任务调度器挂起函数详解。挂起任务调度器,调用此函数不需要关闭中断。原创 2023-01-22 23:13:44 · 3442 阅读 · 1 评论 -
06_FreeRTOS临界区代码保护
什么是临界段:临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段适用场合如:1.外设:需严格按照时序初始化的外设:IIC、SPI等等2.系统:系统自身需求3.用户:用户自身需求什么时候可以打断当前程序的运行?原创 2023-01-21 13:29:15 · 1824 阅读 · 0 评论 -
05_FreeRTOS中断管理
低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS 的API函数。ARM Cortex-M使用了8位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级配置寄存器。BASEPRI:屏蔽优先级低于某一个阈值的中断,当设置为0时,则不关闭任何中断。子优先级:当同时发生具有相同抢占优先级的两个中断时,子优先级数值小的优先执行。抢占优先级高的中断可以打断正在执行但抢占优先级低的中断。STM32 的中断优先级可以分为抢占优先级和子优先级。原创 2023-01-15 18:35:54 · 2565 阅读 · 0 评论 -
04_FreeRTOS任务挂起和恢复函数
任务的挂起与恢复的API函数挂起:挂起任务类似暂停,可恢复;删除任务,无法恢复,类似“人死两清”。恢复恢复被挂起的任务FromISR带FromISR后缀是在中断函数中专用的API函数任务挂起函数介绍此函数用于挂起任务,使用时需将宏INCLUDE_vTaskSuspend配置为1。无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复。注意当传入的参数为NULL,则代表挂起任务自身(当前正在运行的任务)任务恢复函数介绍使用该函数注意宏。原创 2023-01-13 20:58:02 · 1832 阅读 · 0 评论 -
03_FreeRTOS任务创建和删除函数讲解
FreeRTOS动态创建任务删除任务源码讲解原创 2023-01-10 23:36:18 · 724 阅读 · 1 评论 -
02_FreeRTOS移植
FreeRtos移植实验原创 2023-01-08 18:27:48 · 667 阅读 · 0 评论 -
01_FreeRTOS基础知识
FreeRTOS基础知识原创 2023-01-06 21:47:44 · 516 阅读 · 1 评论