SVC作为操作系统函数门户示意图-浅谈phy芯片utp接口直连(不使用变压器)的设计

上传者: 26741799 | 上传时间: 2021-10-24 15:31:19 | 文件大小: 15.67MB | 文件类型: -
图 7.14  SVC作为操作系统函数门户示意图  SVC异常通过执行”SVC”指令来产生。该指令需要一个立即数,充当系统调用代号。SVC 异常服务例程稍后会提取出此代号,从而解释本次调用的具体要求,再调用相应的服务函数。 例如,  SVC    0x3  ;  调用 3 号系统服务  在 SVC 服务例程执行后,上次执行的 SVC 指令地址可以根据自动入栈的返回地址计算 出。找到了 SVC 指令后,就可以读取该 SVC 指令的机器码,从机器码中萃取出立即数,就 获知了请求执行的功能代号。如果用户程序使用的是 PSP,服务例程还需要先执行MRS  Rn,  PSP 指令来获取应用程序的堆栈指针。通过分析 LR 的值,可以获知在 SVC 指令执行时,正 在使用哪个堆栈(细节在第 8 章中讨论)。  SVC vs. SWI 如果你曾使用过其它的 ARM 处理器(如 ARM7),你也许会知道那里有一个被称为 “软件中断”的指令(SWI)。SVC 的地位与 SWI 是相同的——而且连机器码都相同。 然而,因为在 CM3 中,异常处理模型已经“洗心革面”了,就故意把该指令也重命名, 以强调它是在新生的系统中使用的。并且让程序员在把 ARM7代码移植到 CM3 时,能 充分注意到这个本质的不同(至少必须得改名,每次改名时都得到警示)。  由 CM3 的中断优先级模型可知,你不能在 SVC 服务例程中嵌套使用 SVC 指令(事实上 这样做也没意义),因为同优先级的异常不能抢占自身。这种作法会产生一个用法 fault。同 理,在 NMI服务例程中也不得使用 SVC,否则将触发硬 fault。  另一个相关的异常是 PendSV(可悬起的系统调用),它和 SVC 协同使用。一方面,SVC 异常是必须立即得到响应的(若因优先级不比当前正处理的高,或是其它原因使之无法立即 响应,将上访成硬 fault——译者注),应用程序执行 SVC时都是希望所需的请求立即得到响 应。另一方面,PendSV 则不同,它是可以像普通的中断一样被悬起的(不像 SVC 那样会上 访)。OS可以利用它“缓期执行”一个异常——直到其它重要的任务完成后才执行动作。悬 起 PendSV  的方法是:手工往 NVIC的 PendSV悬起寄存器中写 1。悬起后,如果优先级不够 高,则将缓期等待执行。  PendSV的典型使用场合是在上下文切换时(在不同任务之间切换)。例如,一个系统中 122    资料整理自互联网,版权归原作者! 欢迎访问 www.XinShiLi.net 新势力单片机、嵌入式

文件下载

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明