学习FreeRTOS专栏
文章平均质量分 85
本专栏记录FreeRTOS的学习记录及相关知识点
Sunny_Coder
这个作者很懒,什么都没留下…
展开
-
【学习FreeRTOS】第20章——FreeRTOS内存管理
申请内存xWantedSize:申请的内存大小,以字节为单位;返回值:返回一个指针,指向已分配大小的内存。如果申请内存失败,则返回NULL。释放内存*pv:指针指向一个要释放内存的内存块;获取当前空闲内存的大小返回值:返回当前剩余的空闲内存大小.在一段内存没有被释放之前绝对不能再调用一次函数pvPortMalloc()为其再次分配内存,否则会导致内存泄露定义一个大数组作为 FreeRTOS 管理的内存堆/* 定义一个大数组作为 FreeRTOS 管理的内存堆 *///一般是10K。原创 2023-08-26 17:09:23 · 1377 阅读 · 0 评论 -
【学习FreeRTOS】第19章——FreeRTOS低功耗模式Tickless
很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等一般MCU都有相应的低功耗模式,,方便带FreeRTOS操作系统的应用开发。原创 2023-08-25 17:31:18 · 484 阅读 · 0 评论 -
【学习FreeRTOS】第18章——FreeRTOS软件定时器
const char * pcTimerName /* 软件定时器名字 */ListItem_t xTimerListItem /* 软件定时器列表项 *//* 软件定时器的周期 */void * pvTimerID /* 软件定时器的ID *//* 软件定时器的回调函数 */#if。原创 2023-08-25 16:42:39 · 471 阅读 · 0 评论 -
【学习FreeRTOS】第17章——FreeRTOS任务通知
任务通知API函数主要有两类:①发送通知 ,②接收通知。【注意】发送通知API函数可以用于任务和中断服务函数中;接收通知API函数只能用在任务中。xTaskNotify():发送任务通知,带有通知值xTaskNotifyAndQuery():发送任务通知,带有通知值,保留接收任务原通知值xTaskNotifyGive():发送任务通知,不带通知值xTaskNotifyFromISR():在中断中发送任务通知xTaskNotifyAndQueryFromISR():在中断中发送任务通知。原创 2023-08-24 15:06:52 · 393 阅读 · 0 评论 -
【学习FreeRTOS】第16章——FreeRTOS事件标志组
xEventGroupCreate():使用动态方式创建事件标志组xEventGroupCreateStstic():使用静态方式创建事件标志组xEventGroupClearBits():清零事件标志位xEventGroupClearBitsFromISR():在中断中清零事件标志位xEventGroupSetBits():设置事件标志位xEventGroupSetBitsFromISR():在中断中设置事件标志位xEventGroupWaitBits():等待事件标志位。原创 2023-08-23 17:51:48 · 381 阅读 · 0 评论 -
【学习FreeRTOS】第15章——FreeRTOS队列集
xQueueCreateSet():创建队列集xQueueAddToSet():队列添加到队列集中xQueueRemoveFromSet():从队列集中移除队列xQueueSelectFromSet():获取队列集中有效消息的队列xQueueSelectFromSetFromlSR():在中断中获取队列集中有有效消息的队列。原创 2023-08-23 17:01:46 · 340 阅读 · 0 评论 -
【学习FreeRTOS】第14章——FreeRTOS信号量
优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。在使用二值信号量的时候,经常会遇到优先级翻转的问题。解释:高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。从现象上看,就像是中优先级的任务比高优先级任务具有更高的优先权(即优先级翻转)二值信号量数值信号量互斥信号量总结创建。原创 2023-08-21 15:55:12 · 242 阅读 · 0 评论 -
【学习FreeRTOS】第13章——FreeRTOS队列
int8_t * pcHead /* 存储区域的起始地址 *//* 下一个写入的位置 */union} u;/* 等待发送列表 *//* 等待接收列表 *//* 非空闲队列项目的数量 *//* 队列长度 *//* 队列项目的大小 *//* 读取上锁计数器 *//* 写入上锁计数器 *//* 其他的一些条件编译 */} xQUEUE;//当用于队列使用时:/* 存储区的结束地址 *//* 最后一个读取队列的地址 */原创 2023-08-19 12:09:54 · 892 阅读 · 0 评论 -
【学习FreeRTOS】第12章——FreeRTOS时间管理
相对延时 vTaskDelay():指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束绝对延时xTaskDelayUntil():指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务中止任务延时xTaskAbortDelay():用于终止处于阻塞态任务的阻塞(1)为任务主体,也就是任务真正要做的工作(2)是任务函数中调用vTaskDelayUntil()对任务进行延时(3)为其他任务在运行。原创 2023-08-18 16:20:24 · 451 阅读 · 0 评论 -
【学习FreeRTOS】第11章——FreeRTOS中任务相关的其他API函数
此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet置1形参:xTask,要查找的任务句柄(NULL代表任务自身)返回值:整数,任务优先级数值。原创 2023-08-18 11:39:20 · 356 阅读 · 0 评论 -
【学习FreeRTOS】第10章——FreeRTOS时间片调度
注意:使用时间片调度需把宏 configUSE_TIME_SLICING 和 configUSE_PREEMPTION 置1。原创 2023-08-17 09:14:04 · 292 阅读 · 0 评论 -
【学习FreeRTOS】第9章——FreeRTOS任务调度
任务切换的本质:就是CPU寄存器的切换(又称上下文切换),在PendSV中断服务函数中完成需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场触发PendSV中断方式滴答定时器中断调用执行FreeRTOS提供的相关API函数:portYIELD()通过向中断控制和状态寄存器 ICSR 的bit28 写入 1 挂起 PendSV 来启动 PendSV 中断。原创 2023-08-16 20:59:35 · 440 阅读 · 0 评论 -
【学习FreeRTOS】第8章——FreeRTOS列表和列表项
* 初始化时,列表中只有xListEnd,因此pxIndex指向xListEnd *//* xListEnd的值初始化为最大值,用于列表项升序排序时,排在最后 *//* 初始化时,列表中只有xListEnd,因此上一个和下一个列表项都为xListEnd本身 *//*初始化时,列表中的列表项数量为0(不包含xListEnd) *//* 初始化用于检测列表数据完整性的校验值 */形参:待初始化列表。原创 2023-08-15 18:21:51 · 797 阅读 · 0 评论 -
【学习FreeRTOS】第7章——FreeRTOS临界段代码保护及调度器挂起与恢复
FreeRTOS 在进入临界段代码的时候需要关闭中断(管理范围内),当处理完临界段代码以后再打开中断taskENTER_CRITICAL()——任务级进入临界段taskEXIT_CRITICAL()——任务级退出临界段taskENTER_CRITICAL_FROM_ISR()——中断级进入临界段taskEXIT_CRITICAL_FROM_ISR()——中断级退出临界段系统任务调度靠中断,ISR也靠中断,临界区是直接屏蔽了中断,实现代码保护的目的成对使用。原创 2023-08-14 17:09:11 · 438 阅读 · 0 评论 -
【学习FreeRTOS】第6章——FreeRTOS中断管理
中断:让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断中断请求:外设产生中断请求(GPIO外部中断、定时器中断等)响应中断:CPU停止执行当前程序,转而去执行中断处理程序(ISR)退出中断:执行完毕,返回被打断的程序处,继续往下执行。原创 2023-08-11 20:39:51 · 438 阅读 · 0 评论 -
【学习FreeRTOS】第5章——FreeRTOS任务挂起与恢复
【代码】【学习FreeRTOS】第5章——FreeRTOS任务挂起与恢复。原创 2023-08-11 20:38:52 · 462 阅读 · 0 评论 -
【学习FreeRTOS】第4章——FreeRTOS任务创建与删除
在实际的应用中,动态方式创建任务是比较常用的,除非有特殊的需求,一般都会使用动态方式创建任务静态创建:可将任务堆栈放置在特定的内存位置,并且无需关心对内存分配失败的处理临界区保护,保护那些不想被打断的程序段,关闭freertos所管理的中断,中断无法打断,滴答中断和PendSV中断无法进行不能实现任务调度以下是动态创建任务和静态创建任务的区别动态创建静态创建TCB与堆栈内存自动分配手动分配TCB与任务句柄的关系句柄是动态TCB的指针与静态TCB无特定关系返回值。原创 2023-08-11 18:22:14 · 526 阅读 · 0 评论 -
【学习FreeRTOS】第3章——FreeRTOS移植及配置文件
对于初学者来说,这些配置内容,目前有个感性的认识即可,随着后面例程的使用就会逐渐熟练起来。移植步骤细节根据《 FreeRTOS开发指南》的第二章操作。原创 2023-08-10 20:13:02 · 436 阅读 · 0 评论 -
【学习FreeRTOS】第2章——FreeRTOS基础知识
FreeRTOS中任务共存在4种状态:运行态:正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态就绪态:如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态阻塞态:如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态总结:仅就绪态可转变成运行态其他状态的任务想运行,必须先转变成就绪态。原创 2023-08-10 18:22:16 · 371 阅读 · 0 评论 -
【学习FreeRTOS】第1章——FreeRTOS入门
FreeRTOS 是一个免费的嵌入式实时操作系统免费开源:商业产品中使用,无潜在商业风险,无须担心可裁剪:FreeRTOS的核心代码9000+行,包含在3个.c文件中简单:简单易用,可移植性非常好优先级不限:任务优先级分配没有限制,多任务可同一优先级(一般设置0-31)任务不限:可创建的实时任务数量没有软件限制(要考虑硬件内存大小)抢占/协程/时间片:支持抢占式,协程式、时间片流转任务调度FreeRTOS官网:https://www.freertos.org/,学习流程循序渐进,由浅入深。原创 2023-08-10 17:43:22 · 298 阅读 · 0 评论