- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 基于STM32的简易RTOS分析-调度锁
调度锁是RTOS提供的调度器开关函数,如果某个任务调用了调度锁开关函数,处于调度锁开和调度锁关之间的代码在执行期间是不会被高优先级的任务抢占的,即任务调度被禁止。在调度锁范围内的代码是独占MCU资源的,当前的被调度锁锁住的代码不能切换到其他的任务运行。......
2022-07-16 09:22:30 426 1
原创 基于STM32的简易RTOS分析-临界区
如果程序中有一段代码在执行期间不允许被中断,那么它就是具有原子性质的代码段,这种代码段就叫做临界区。为了防止临界段代码在执行期间被打断,因此在执行它之前要关闭中断或者调度器,执行结束后再打开中断或者调度器。...
2022-07-14 11:48:27 869
原创 基于STM32的简易RTOS分析-延时函数与空闲任务
之前的代码里为了实现LED灯闪烁效果,需要先将LED点亮然后延时一段时间后将其熄灭。在这段延时等待期间MCU一直在做无意义的等待计数,为了提高MCU机时的有效利用率,可以让MCU在延时的这段时间内执行其他任务。任务自身发起延时后放弃MCU使用权导致自身的运行发生阻塞,这种延时就叫做阻塞式延时。...
2022-07-13 14:00:14 713
原创 基于STM32的RTOS简易分析-混合式调度
FreeRTOS和Ucos中不同优先级的任务运行时采用的是抢占式调度,同一优先级下有多个任务需要运行时,则对同优先级的任务进行时间片轮转调度。将抢占式调度和时间片轮转调度联合使用就是混合式调度。 ...
2022-07-11 17:56:10 391
原创 基于STM32的简易RTOS分析-抢占式调度
抢占式调度一般是基于优先级(priority)的调度。《FreeRTOS的任务调度算法优化实现》这篇文章中提到FreeRTOS是通过循环遍历的方法查找最高优先级就绪态任务,而Ucos采用的是位图(bitmap)算法查找最高优先级任务。调度器是RTOS的核心模块运行频繁,因此其代码设计上要运行速度快开销少才能满足RTOS的实时性要求。 .........
2022-07-10 16:15:19 1092
原创 基于STM32的简易RT0S分析-任务切换实例分析
手上没有使用Cortex-M3内核的芯片,只有一个STM32F407VG的Discovery开发版,这款芯片使用的是Cortex-M4F的内核,这个内核是基于ARMV7E-M架构的与Cortex-M3十分类似,只是多了一个FPU(浮点运算单元)以及浮点运算需要的相关寄存器。也因为这个FPU导致进入中断的时候保存的寄存器有些差别,不过这些堆栈都是硬件自动保存的,对编写任务切换代码没有影响,在文章的最后来简单分析下浮点寄存器如何入栈。这篇文章的思路参考了《一步步写STM32 OS【三】PendSV与堆栈操作》
2021-03-05 22:49:00 1099 3
原创 基于STM32的简易RTOS分析-任务切换过程分析
在这篇文章中我们来分析一下不同优先级的任务是如何在PendSV中断中进行切换的,为后续我们自己写一个简易的切换程序做铺垫。目前互联网上学习资料最多的两种RTOS是FreeRTOS和Ucos,他们二者的任务切换程序不同之处主要体现在如何启动第一个任务上,FreeRTOS时通过软件触发SVC中断进而来启动第一个任务,Ucos则是对进程堆栈指针(PSP)与0做比较来确认是否为系统在启动第一个任务。在这里我们以Ucos为例来分析一下任务的切换过程。Ucos的内核中任务切换函数放在了os_cpu_a.s这个汇编文
2021-02-28 22:52:53 948 1
原创 基于STM32的简易RTOS分析-预备知识
基于STM32的简易RTOS分析-预备知识一、Cortex-M3寄存器简介目录基于STM32的简易RTOS分析-预备知识一、Cortex-M3寄存器简介
2021-02-27 20:01:18 1255 1
DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf
2021-03-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人