-
FreeRTOS
-
什么是队列:队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)
-
什么是信号量:信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问(信号量用于传递状态)
-
二值信号量和互斥信号量的区别是什么
-
二值信号量的本质是一个长度为 1 的队列 ,该队列就只有空和满两种情况
-
互斥信号量其实就是一个拥有优先级继承的二值信号量
-
任务和任务,任务和中断之间同步,用二值信号量最合适
-
互斥访问,用互斥信号量更合适
-
-
四种任务状态
-
运行态:正在执行的任务,该任务就处于运行态,在STM32中,同一时间仅一个任务处于运行态
-
就绪态:如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态
-
阻塞态:如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态
-
挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态
-
-
任务是如何切换的:以下两种情况会发生任务切换
-
systick中断处理
-
主动调用taskYIELD及其变种
-
-
调度方式
-
抢占式调度:每个任务都有不同的优先级,任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数,比如 vTaskDelay。
-
时间片调度:每个任务都有相同的优先级,任务会运行固定的时间片个数或者遇到阻塞式的 API 函数,比如vTaskDelay,才会执行同优先级任务之间的任务切换
-
合作式调度
-
-
什么是优先级翻转:高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。从现象上看,就像是中优先级的任务比高优先级,任务具有更高的优先权(即优先级翻转)
-
优先级继承:当一个互斥信号量正在被一个低优先级的任务持有时, 如果此时有个高优先级的任务也尝试获取这个互斥信号量,那么这个高优先级的任务就会被阻塞。不过这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级。
-
内存管理是怎么样的
-
FreeRTOS提供了5种内存管理方式
-
Heap_4 算法属于动态内存申请,就是内存的分配和释放是在运行时进行的,而不是在编译时确定的,不需要程序员指定变量的内存大小和位置,也就是可以在程序运行过程中动态创建和删除内核对象
-
heap_4 内存管理算法使用最先适合最先使用算法来分配堆内存,自动将堆内存池中相邻的小块堆内存块组合成一个大的堆内存块,来解决内存碎片问题
-
-
嵌入式面经-FreeRTOS
最新推荐文章于 2024-05-07 12:30:42 发布