rtos入门问题

rtos主要面对的问题有三个方面:1.任务管理 2.任务调度器 3.时间片切换

任务管理

主要需要管理任务状态以及任务列表的管理,一下是几个元素:

1.tcb 任务控制块:1.栈顶(从数组最后一位开始压栈)2.任务节点 3.栈起始地址 4.任务名称

2.任务就绪列表,是一个数组,每一个数组的下标表示当前的任务优先级,优先级相同的任务插入相同的任务就绪列表中的数组元素。

如何理解tcb和任务就绪列表的关系?我们只需要知道tcb是用来切换任务的,只需要回答如何在就绪列表中找到tcb这个问题即可。

首先tcb中的xstateklist会在 prvInitialiseNewTask() 中的 list_list_item_owner函数添加归属的tcb

接着插入到指定的就绪列表中,调用的时候只需要遍历list中从响应的xstatelistitem中获取owner(tcb)即可

任务调度器

1.初始化调度器,一般是将当前tcb指向最高任务优先级tcb(最小数组序号最小),一般是在插入优先级就绪列表的时候边插入边更新。

2.如何调度,使用了两个中断: svc(m0内核没有)和pendsv

2.1 svc

主要是将tcb中存储的栈信息全部读出。

ldr r3, =pxCurrentTCB ; 1. r3 = 变量 pxCurrentTCB 的地址

ldr r1, r3 ; 2. r1 = pxCurrentTCB 的值,即 当前TCB结构体的起始地址

ldr r0, r1 ; 3. 从`TCB起始地址`读取4字节,得到的就是第一个成员 `pxTopOfStack` 的值

对于bx r14的解释:

2.2 pendsv

主要执行vtaskswitchcontext来获取当前任务的tcb

任务时间片切换

systick起头

相关推荐
敬往事一杯酒哈7 小时前
海康 AGV 导航读码器学习
学习
qq_284274059 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_2842740510 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Titan202411 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
小雪崩12 小时前
嵌入式学习 day64:字符设备驱动
学习
个 人 练 习 生13 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
坤坤子吖13 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
词却15 小时前
OpenCV学习:MediaPipe 人脸网格检测
opencv·学习
李日华大战鸡红15 小时前
FOC SVPWM过调制(学习记录)
stm32·单片机·学习
AI职业加油站15 小时前
AI 校招现状:大模型应用工程师证书,助力简历能力证明
大数据·运维·人工智能·学习·职场发展