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起头

相关推荐
西岸行者12 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意12 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码12 天前
嵌入式学习路线
学习
毛小茛12 天前
计算机系统概论——校验码
学习
babe小鑫12 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms12 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下12 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。12 天前
2026.2.25监控学习
学习
im_AMBER12 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J12 天前
从“Hello World“ 开始 C++
c语言·c++·学习