RTOS
文章平均质量分 78
tilblackout
score til you black out.
展开
-
FreeRTOS开启任务调度函数xPortStartScheduler详解
比如系统正在执行一个受FreeRTOS管理的中断且正在对一个信号量进行操作,此时产生了一个不受FreeRTOS管理的中断,在中断中也调用FreeRTOS信号量函数,那么有可能会使得之前中断保存的上下文并不是实际的上下文,从而产生错误。所以,上面的代码就是取出中断优先级为0的,即第一个用户中断优先级配置寄存器,然后往里面写0xFF来测试8位优先级是几位有效的。如果设置不对,可能导致本不能调用FreeRTOS函数的某优先级的中断可以调用FreeRTOS函数,从而导致某些错误,如信号量的不统一。原创 2023-05-16 22:03:55 · 2366 阅读 · 0 评论 -
FreeRTOS第一个任务的创建和调度详解(SVC异常)
在上一篇文章中,我详细分析了FreeRTOS中上下文切换:基于Cortex-M的RTOS上下文切换详解及FreeRTOS实例但是第一个任务没有上下文,它是怎么运行的呢?如果我们没有创建任务的话,系统也有一个空闲任务用来调度,这里不对这个进行分析。首先,我们知道指向当前运行任务的TCB,所以我们先看看哪里设置了,流程如下的大概逻辑如下:也就是说如果为空,则直接将新创建的任务赋值给,如果不为空且还没有开始任务调度,则判断当前创建任务的优先级是否比中任务的优先级高,若是则更改。接着就是任务调度了,来看看上电后原创 2022-12-07 11:44:30 · 2381 阅读 · 0 评论 -
FreeRTOS遍历所有任务的TCB并获得栈的最大使用量
FreeRTOS的任务栈的大小应该如何设置才能尽可能地不浪费内存呢?最直接的方法当然是运行一段时间任务,然后看看任务所使用的最大堆栈大小为多少,然后以此为基准多设置一点点。那么应该怎么实现呢?原创 2022-11-30 17:26:42 · 1086 阅读 · 1 评论 -
μC/OS-II中最高优先级任务的判定
假设最多支持64个任务,先来看看判断最高优先级任务所用到的相关变量:uint8 OSRdyGrp:将64个任务分成了8组,该变量表示哪一组有就绪任务uint8 OSRdyTbl[8]:即上面的8组任务,对应每一组有8个任务,为1表示该任务就绪uint8 OSUnMapTbl[256]:μC/OS-II中优先级数字越低表示优先级越高。这里就是要获得最低位开始,第一位为1所在的位数。每次都要一位一位的判断很麻烦,干脆将结果做成一个表格,通过索引来获取寻找最高优先级任务相关代码:y = OSU原创 2022-04-28 11:38:30 · 631 阅读 · 0 评论