嵌入式实时操作系统的核心就是调度器和任务切换,调度器的核心就是调度算法。大概分为三种合作式调度器,抢占式调度器和时间片调度器。
合作式调度器就是根据用户的设置时刻(周期或者单次)来执行相应的任务,每个时刻只有一个任务可以执行,这些任务间不支持被强占,直到该任务自愿放弃 CPU 的控制权。
抢占式调度器如果使用了抢占式调度,最高优先级的任务一旦就绪,总能得到 CPU 的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的 CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了 CPU 的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。
抢占式调度器会为每个任务都分配一个优先级,调度器会激活就绪任务中优先级最高的任务。
时间片调度器(Round-robin)实现 Round-robin 调度算法需要给同优先级的任务分配一个专门的列表,用于记录当前就绪的任务,并为每个任务分配一个时间片( 也就是需要运行的时间长度,时间片用完了就进行任务切换)。
这两天忙着验证在线升级程序,复习一遍STM32启动过程:
设置堆栈指针SP指向_initial_sp |
设置PC指针指向Reset_Handler |
设置中断向量表 |
配置系统时钟 |
配置外部SRAM/SDRAM |
跳转的C库执行main |
书籍来源: