FreeRTOS源码分析
文章平均质量分 84
4IOT
这个作者很懒,什么都没留下…
展开
-
FreeRTOS源码分析-14 操作系统多任务核心
双向链表结构1:插入与删除效率高,只要操作一次就能完成2:对数据的管理更加灵活与便捷,有利于编写逻辑清晰的程序。列表与列表项。原创 2023-09-05 23:35:03 · 93 阅读 · 0 评论 -
FreeRTOS源码分析-13 内存管理
heap1:只能分配不能释放,适合不可能去删除的任务heap2:支持分配也支持释放,但是有内存碎片,可用空间会越来越少。释放的空间无法用。heap3:在heap2的基础上多了任务保护,类似锁,不会被打断heap4:有分配,有释放,有管理(默认)heap5:内部其实也是heap4,有内部ram也可以扩展外部ram。音视频会占用大量内存。原创 2023-08-30 23:57:01 · 386 阅读 · 0 评论 -
FreeRTOS源码分析-12 低功耗管理
Idle task 任务中会调用tickless,当休眠时间>10ms那么会进入低功耗模式,可选择3种休眠模式再分析多任务调度源码的时候,有个UnblockTime,我们可以把这个值传给tickless,来计算下个任务需要调度的时间。原创 2023-08-13 22:53:37 · 889 阅读 · 0 评论 -
FreeRTOS源码分析-11 软件定时器
问:为什么要有软件定时器?因为硬件定时器的数量有限,所以会出现软件定时器这样的辅助功能。提醒我们什么时间做什么事。选择时间,重复模式等辅助实用功能。智能化场景非常常见,使用软件定时器能大大减少cpu使用率。到达时间后通过回调函数提供接口实现功能。原创 2023-08-10 23:51:45 · 417 阅读 · 0 评论 -
FreeRTOS源码分析-10 事件标志组
任务可以和事件标志组进行关联,如bit23,任务阻塞等待消息,和消息队列一样有个超时机制当任意任务或者中断触发置位的时候,任务会从阻塞变为就绪态。原创 2023-08-07 23:33:59 · 274 阅读 · 0 评论 -
FreeRTOS源码分析-9 互斥信号量
Mutex 互斥信号量RecursiveMuxtex 互斥信号量(解决普通信号量的死锁问题)原创 2023-08-06 23:02:15 · 344 阅读 · 0 评论 -
FreeRTOS源码分析-8 信号量
这里errQUEUQ_FULL代表信号量释放失败,已经信号量可用了,与上面有所区别。原创 2023-08-02 23:26:58 · 180 阅读 · 0 评论 -
FreeRTOS源码分析-7 消息队列
因为消息队列是可以从任务中发送的,锁定队列是告诉任务不要打断下面程序的查询队列和插入队列,否则整个程序会打乱。实现任务接收来自其他任务或中断的不固定长度的消息。启动调度器之前是不能调用此函数的,因为是在中断中触发的,在中断中不能阻塞。因为操作的消息是共享资源,可以被多个任务或中断接收和发送,那么操作的时候是不希望被别的任务打断的。从消息队列出队一直等待,当接收到第一个消息循环从消息队列出队,阻塞等待50ms,完成消息接收。在FreeROTS中,操作消息队列控制块,只要对头有消息,就会取,直到去完为止。原创 2023-07-30 22:46:55 · 538 阅读 · 0 评论 -
FreeRTOS源码分析-6 多任务使用要点
比如使用静态全局变量,这时候被系统打断,那么会出问题;还比如malloc,分配到一半,被系统打断。原创 2023-07-25 23:53:21 · 305 阅读 · 0 评论 -
FreeRTOS源码分析-5 系统延时详解
判断记录的系统节拍值是否溢出,如果溢出,并且大于当前滴答值,把当前任务添加到延时列表(uint32_t 0xFFFFFFFF 溢出就是0了,溢出并且大于当前滴答值,说明任务还没到达)判断记录的系统节拍,值是否溢出,没有溢出,当前定时间隔小于记录值,或者大于系统节拍值,把当前任务添加到延时列表(认为任务可以触发,添加到延时列表)总结:添加任务到延时列表的处理,主要是去计算tick值,通过tick值判断是添加到延时溢出列表、还是延时列表、还是挂起,三种状态进行处理。使能vTaskDelayUntil。原创 2023-07-23 16:01:06 · 534 阅读 · 0 评论 -
FreeRTOS源码分析-4 SysTick系统时钟详解
其中装载值1ms、10ms、100ms都可以,但是不要小于1ms。在vPortSetupTimerInterrupt中。问:如何与操作系统内核联系起来?原创 2023-07-22 22:03:14 · 1534 阅读 · 1 评论 -
FreeRTOS源码分析-3多任务调度背景知识
这样,在任务执行时,使用的是任务自己的私有堆栈,而不会影响其他任务或操作系统内核的堆栈。在FreeRTOS中,通常会将操作系统内核的代码设置为特权级(0),而任务代码设置为非特权级(1)。FreeRTOS操作系统,是通过Systick中断,来遍历优先级最高的任务,这个时候,一旦进入中断使用MSP,但是退出的时候可以选择PSP。上图描述了系统启动一个中断流程,OS启动一上电需要响应快,所以使用的SVC中断,之后使用PendSV中断切换任务b,当Systick中断发生再会调用PendSV切换至优先级高的任务。原创 2023-07-20 00:08:26 · 287 阅读 · 0 评论 -
FreeRTOS源码分析-2任务挂起和恢复
另外有在中断中恢复任务函数:因为有调度,这是不允许的,所以有特殊的在中断中调度的任务函数。任务挂起与任务删除类似。原创 2023-07-17 23:59:20 · 226 阅读 · 0 评论 -
FreeRTOS源码分析-1创建任务和任务删除
链接到任务状态表中,任务控制块连接到事件表中,任务堆栈初始化,之后返回任务栈顶。具体工作,把栈空间的高地址分配给栈顶,任务分配的优先级,任务控制块。为什么分析异常处理?任务调度其实就是通过CPU内核异常处理实现的。任务栈分配内存、控制块分配内存,把任务添加到就绪列表。返回值是确定程序使用的栈地址是哪一个?资料阅读M4权威指南,第八章节,分析异常处理。接下来就是分析上面任务堆栈的初始化。M4权威指南4.4.3栈存储。程序的写法顺序按照下图所示。原创 2023-07-16 23:58:34 · 322 阅读 · 0 评论