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

Cortex-M3 SVC与PendSV的更多相关文章

  1. ARM Cortex M3(V7-M架构)硬件启动程序 一

    Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表 ...

  2. ARM Cortex M3系列GPIO口介绍(工作方式探讨)

    一.Cortex M3的GPIO口特性    在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图     从图中可以看出 ...

  3. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)

    ARM架构:  由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7:       一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...

  4. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  5. Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors

    Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...

  6. 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别

    ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...

  7. 【freertos】002-posix模拟器设计与cortex m3异常处理

    目录 前言 posix 标准接口层设计 模拟器的系统心跳 模拟器的task底层实质 模拟器的任务切换原理 cortex M3/M4异常处理 双堆栈指针 双操作模式 栈帧 EXC_RETURN 前言 如 ...

  8. stm32和cortex M3学习内核简单总结

    1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来 ...

  9. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

随机推荐

  1. 读书笔记《Oracle从入门到精通》

    目录 一.SQL基础 1.SQL种类 2.常用数据类型 3.DDL 4.约束 5.DML语句 二.SELECT语句 1.结果集'*'与指定列 2.拼接符 || 3.substr函数 4.instr函数 ...

  2. Redis的keyspace notification(键空间通知)

    文章来源https://www.cnblogs.com/tinywan/p/5903988.html 一.需求分析: 设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期Key有个监听,如何 ...

  3. Thymeleaf初探

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  4. Jmeter最佳录制工具BlazeMeter

    简介 在做接口测试时,开发会提供接口文档作为测试脚本编写的依据,但接口文档往往有一些局限性: 接口文档本身可能有编写错误 接口文档可以针对单个字段的取值和含义做描述,但多个字段的组合作用很难通过文字做 ...

  5. ELK展示NGINX访问IP地理位置图

    一.设置NGINX日志格式 [root@zabbix_server ~]# vim /etc/nginx/nginx.conf log_format access_json_log '{"@ ...

  6. 测试工具jmeter

    测试工具jmeter http:压力测试 https://www.cnblogs.com/stulzq/p/8971531.html

  7. CSS基础学习-14 CSS visibility与overflow属性

  8. MySQL 关于触发器的操作

    -- 监视某种情况,并触发某种操作 --触发器创建语法四要素 1.监视地点 2.监视事件 3.触发时间 4.触发事件 -- 触发器只能创建在永久表上,不能对临时表创建触发器 create trigge ...

  9. 手机存储器在Ubuntu中的挂载位置

    造冰箱的大熊猫,本文适用于Ubuntu 16.04和安卓手机@cnblogs 2018/12/6 通过USB数据线将安卓手机与Ubuntu相连,并在手机上设置“USB连接方式”为“传输文件”后,Ubu ...

  10. poj 2431 Expedition 贪心+优先队列 很好很好的一道题!!!

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10025   Accepted: 2918 Descr ...