![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
FreeRtos
文章平均质量分 51
本专栏主要分析FreeRtos偏底层的代码
KiranWang
某互联网大厂资深研发工程师。
展开
-
FreeRtos 时间管理(二)
本篇主要介绍FreeRtos的绝对延时函数vTaskDelayUntil。原创 2024-03-30 13:22:18 · 216 阅读 · 0 评论 -
FreeRtos时间管理(一)
FreeRtos的时间管理包括相对延时vTaskDelay、绝对延时vTaskDelayUntil、系统时钟Systick本篇主要分析相对延时vTaskDelay函数,需要分析下PendSv中断触发的位置。原创 2024-03-23 13:22:19 · 313 阅读 · 0 评论 -
FreeRtos Queue(五)
xQueueGenericSendFromISR 和 xQueueReceiveFromISR都是在中断里调用的而不是任务里调用的,所以队列满了或者是队列为空的时候自然就没有把当前任务放到xTasksWaitingToSend或者xTasksWaitingToReceive链表里这一说,因此,在中断里的处理就会简单很多。pxHigherPriorityTaskWoken 这个变量是个输出类型参数,函数执行完的时候通过这个变量的值来判断是否需要任务切换。原创 2024-03-09 13:01:10 · 260 阅读 · 0 评论 -
FreeRtos Queue(四)
本篇主要分析xQueueReceive,从队列中读取消息,读消息也是在死循环里操作的,大致分为两个逻辑:1、队列不为空的时候的处理2、队列为空的时候的处理。原创 2024-03-02 13:11:31 · 217 阅读 · 0 评论 -
FreeRtos Queue(三)
本篇主要分析向队列中发送消息 xQueueGenericSend 这个函数。大致分为两个逻辑:1、当队列没满的时候的处理2、当队列没满的时候的处理主意:整个xQueueGenericSend是在for(;;)中处理的。原创 2024-02-24 13:41:07 · 238 阅读 · 0 评论 -
FreeRtos Queue (二)
1、prvLockQueue和prvUnlockQueue是FreeRtos内核函数,只能供内核调用,应用层无法call。2、cTxLock和cRxLock为中断上锁计数器,cTxLock记录了队列上锁期间在中断里入队的数量,cRxLock记录了队列上锁期间在中断里出队的数量。原创 2024-01-27 13:02:01 · 240 阅读 · 0 评论 -
FreeRtos Queue (一)
本篇主要讲队列的数据结构和初始化。原创 2024-01-13 13:12:39 · 400 阅读 · 0 评论 -
FreeRtos 内存管理(二)
本篇讲heap_3.c、heap_4.c、heap_5.c。原创 2024-01-09 10:45:18 · 416 阅读 · 0 评论 -
FreeRtos内存管理(一)
FreeRtos里面有5个heap.c,本篇先只讲heap1.c和heap2.c。原创 2023-12-23 13:58:08 · 393 阅读 · 0 评论 -
FreeRtos里的几个中断屏蔽
在这个中断里面打了个断点,debug了一下,当前系统中configMAX_SYSCALL_INTERRUPT_PRIORITY是0x10。FreeRtos的开关中断就是通过basepri寄存器实现的。例如: portDISABLE_INTERRUPTS()然后portENABLE_INTERRUPTS()开中断。取消对中断的屏蔽,可以直接将basepri清零。原创 2023-12-16 13:31:30 · 296 阅读 · 0 评论 -
FreeRtos第一个task是怎么run起来的
第一个task是怎么起来的呢?分析完vTaskStartScheduler,就会有答案了。那vTaskStartScheduler()干了啥呢?原创 2023-12-02 13:12:28 · 163 阅读 · 0 评论 -
FreeRtos任务创建分析
以xTaskCreateStatic为例。xTaskCreateStatic中调用了两个函数:prvInitialiseNewTask 和prvAddNewTaskToReadyList。原创 2023-11-25 15:15:18 · 127 阅读 · 0 评论 -
FreeRtos 任务切换深入分析
跳转到vTaskSwitchContext这个C函数中执行,这个函数中就将下一个要执行的任务的TCP更新到。2、freertos的任务切换是在xPortPendSVHandler 中断函数中完成的。将r4-r11,r14保存到任务栈psp中。并将栈顶位置写入到r2中,即。1、任务切换包含三个基本流程:保护现场、更新TCB、恢复现场并跳转。将r3和r0从msp中恢复出来,注意:此时的r3中的。此时的sp为msp,即将r3、r0保存到msp中。r14即LR中记录了中断返回的地址,跳转执行。原创 2023-11-18 14:11:02 · 399 阅读 · 0 评论