Cortex-M3 SVC与PendSV
2024-08-24 09:19:43
【SVC】
SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中。
SVC用于产生系统函数的调用请求。例如,操作系统通常不允许用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用SVC发出对系统服务函数的调用请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就要产生一个SVC异常,然后操作系统提供的SVC异常服务程序得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。
【两个任务间通过SysTick进行轮转调度的简单模式】
【发生IRQ时上下文切换的问题】
【使用PendSV控制上下文切换】
事件流:
1、任务A呼叫SVC来请求任务切换(例如,等到某些工作完成);
2、OS接收到请求,做好上下文切换的准备,并且悬起一个PendSV异常;
3、当CPU退出SVC后,它立即进入PendSV,从而执行上下文切换;
4、当PendSV执行完毕后,将返回到任务B,同时进入线程模式;
5、发生了一个中断,并且中断服务程序已开始执行;
6、在ISR执行过程中,发生SysTick异常,并且抢占了该ISR;
7、OS执行必要的操作,然后悬起PendSV异常以作好上下文切换的准备;
8、当SysTick退出后,回到先前被抢占的ISR中,ISR继续执行;
9、ISR执行完毕并退出后,PendSV服务程序开始执行,并且在里面执行上下文切换;
10、当PendSV执行完毕后,回到任务A,同时系统再次进入线程模式。
最新文章
- 【技术贴】VirtualBox给VDI格式的虚拟机扩容
- 慢牛股票-基于Sencha+Cordova的股票类APP
- 第七篇、OC_图片的裁剪基于SDWebImage
- Android adapter适配器的使用
- 理解JavaScript中作用域链的关系
- 深度优先搜索——迷宫问题(华为oj)
- winform实现动态按钮
- (简单) POJ 3159 Candies,Dijkstra+差分约束。
- 在Linux服务器部署 .NET-Core 项目
- 利用eval函数实现简单的计算器
- python—day15 包的认识、执行顺序、执行流程、循环导入、包的导入、绝对、相对导入
- java 中的Collection
- C# 下载文件 只利用文件的存放路径来下载
- gedit embeded terminal 设置字体 颜色
- Android 手势&;触摸事件
- (Java)怎么去掉字符串数组中重复的值?
- std::set 中内部元素有序条件删除的理解
- Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
- MySQL查询语句练习题(面试时可能会遇到哦!)
- CSS控制显示图片的一部分
热门文章
- ubuntu16.04环境LNMP实现PHP5.6和PHP7.2
- Delphi CreateFile函数
- 第八章· Redis API 开发
- C# 列表中查找大小比较
- java-集合学习-底层实现
- CentOS 使用 sudo 遇到 command not found 问题解决
- Twitter的支撑架构:扩展网络与存储并提供服务——架构原则:一次性将事情做对,NFL原则 LSM+B+存储替代cassandra
- codeforces 576C Points on Plane 相邻两点的欧拉距离
- 数据驱动——ddt
- js 深浅拷贝 笔记总结