【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,同时系统再次进入线程模式。

最新文章

  1. 【技术贴】VirtualBox给VDI格式的虚拟机扩容
  2. 慢牛股票-基于Sencha+Cordova的股票类APP
  3. 第七篇、OC_图片的裁剪基于SDWebImage
  4. Android adapter适配器的使用
  5. 理解JavaScript中作用域链的关系
  6. 深度优先搜索——迷宫问题(华为oj)
  7. winform实现动态按钮
  8. (简单) POJ 3159 Candies,Dijkstra+差分约束。
  9. 在Linux服务器部署 .NET-Core 项目
  10. 利用eval函数实现简单的计算器
  11. python—day15 包的认识、执行顺序、执行流程、循环导入、包的导入、绝对、相对导入
  12. java 中的Collection
  13. C# 下载文件 只利用文件的存放路径来下载
  14. gedit embeded terminal 设置字体 颜色
  15. Android 手势&触摸事件
  16. (Java)怎么去掉字符串数组中重复的值?
  17. std::set 中内部元素有序条件删除的理解
  18. Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
  19. MySQL查询语句练习题(面试时可能会遇到哦!)
  20. CSS控制显示图片的一部分

热门文章

  1. ubuntu16.04环境LNMP实现PHP5.6和PHP7.2
  2. Delphi CreateFile函数
  3. 第八章· Redis API 开发
  4. C# 列表中查找大小比较
  5. java-集合学习-底层实现
  6. CentOS 使用 sudo 遇到 command not found 问题解决
  7. Twitter的支撑架构:扩展网络与存储并提供服务——架构原则:一次性将事情做对,NFL原则 LSM+B+存储替代cassandra
  8. codeforces 576C Points on Plane 相邻两点的欧拉距离
  9. 数据驱动——ddt
  10. js 深浅拷贝 笔记总结