Cortex-M3 SVC与PendSV
【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的更多相关文章
- ARM Cortex M3(V7-M架构)硬件启动程序 一
Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表 ...
- ARM Cortex M3系列GPIO口介绍(工作方式探讨)
一.Cortex M3的GPIO口特性 在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图 从图中可以看出 ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)
ARM架构: 由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7: 一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...
- STM32学习之路入门篇之指令集及cortex——m3的存储系统
STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码 操作数1, 操作数2,... ...
- 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 ...
- 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...
- 【freertos】002-posix模拟器设计与cortex m3异常处理
目录 前言 posix 标准接口层设计 模拟器的系统心跳 模拟器的task底层实质 模拟器的任务切换原理 cortex M3/M4异常处理 双堆栈指针 双操作模式 栈帧 EXC_RETURN 前言 如 ...
- stm32和cortex M3学习内核简单总结
1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来 ...
- ARM Cortex M3(V7-M架构)硬件启动程序 二
解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...
随机推荐
- Mysql学习笔记【一、环境安装&配置】
安装 https://www.mysql.com/ 官网下载安装包msi 安装流程略去 注:此处有坑,重新安装mysql 8之后,发现mysql起不来,可能原因有以下几点 1.没有data文件,运行m ...
- 平时工作常用linux命令总结
mkdir 创建目录 make dir cp 拷贝文件 copy mv 移动文件 move rm 删除文件 remove # 创建连级目录 mkdir -p a/b/c # 拷贝文件夹a到文 ...
- 05.Zabbix自动化监控
1.Zabbix自动发现(被动) 网络发现官方手册 网络发现由两个阶段组成:发现discovery和动作actions 1.单击配置->自动发现->启动默认的Local network 2 ...
- 菜鸟宝典之Windows Server 2012 R2上PHP、MySQL环境搭建
原文来自:https://www.jb51.net/article/59280.htm 上车准备一.准备工具服务器操作系统:Windows Server 2012PHP版本:5.6.9(根据自己需要) ...
- 打造高效 VIM
删除空行 删除1到10行的空行 :1,10g/^$/d 命令行快捷命令 Bang(!)命令 上一条命令:!! 使用上一条命令的所有参数:!* 使用上一条命令的最后一个参数:!$ 使用上一条命令中除了最 ...
- 数据防泄密(DLP)
数据防泄密(DLP)近几年已经成为国内非常热门的关键词. 目前市场上DLP产品主要可以分为三大类,各类产品都来源于不同的技术体系,防护效果也各有优缺点. 第一类,以监控审计为主,对进出的数据进行过滤, ...
- cubase 的FX轨道使用方法
FX为辅助通道!
- vue+django前后端项目部署
一.python3的安装 1.安装python前的库环境: yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel ...
- Golang GC 垃圾回收机制详解
摘要 在实际使用 go 语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究.本文对研究的结果进行一下总结. 什么是垃圾回收? 曾几何时,内存管理是程序员开发应 ...
- 【C#-多线程】实现每隔一段时间执行代码(多线程) 3种定时器
总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...