当前位置: 首页 > news >正文

重庆建设厅网站网络营销策略分析报告

重庆建设厅网站,网络营销策略分析报告,沈阳专业网站建设公司,2级a做爰片免费网站0 参考资料 Cortex M3权威指南(中文).pdf ARM Cortex-A(armV7)编程手册V4.0.pdf1 Cortex-A7和Cortex-M7处理器架构取中断向量全流程分析 1.1 什么是中断向量? 中断向量就是中断服务函数入口地址,例如我们发生了EXTI0中断,就需要执行EXT0中…

0 参考资料

Cortex M3权威指南(中文).pdf
ARM Cortex-A(armV7)编程手册V4.0.pdf

1 Cortex-A7和Cortex-M7处理器架构取中断向量全流程分析

1.1 什么是中断向量?

中断向量就是中断服务函数入口地址,例如我们发生了EXTI0中断,就需要执行EXT0中断对应的中断服务函数EXTI0_IRQHandler,这个中断服务函数入口地址就是中断向量。

1.2 什么是中断向量表?

通常来说CPU会有各种各样不同的中断,它们对应的中断服务函数也不一样。CPU为了在中断发生时更快地跳转到对应的中断服务函数响应中断,就人为将中断向量按顺序存储在内存中(一般是Flash),这样就形成了一张映射表。CPU只要知道这片内存的首地址、中断ID、每个中断向量占据的内存空间,就能很快找到中断源对应的中断服务函数,响应中断。以Cortex-M3为例,它的中断向量表部分定义如下:
在这里插入图片描述

1.3 什么是中断向量表偏移地址?什么是中断向量表基址?

我们已经知道中断向量表的作用,CPU为了能够访问向量表,需要知道向量表的地址,这个就是中断向量表基址(起始地址)。
为了实现这一目的,有些CPU(如Cortex-M3架构处理器)提供了一个中断向量表偏移寄存器,通过中断向量表相对于存储器首地址的偏移量计算出中断向量表基址。还有些CPU(如Cortex-A7架构处理器)提供了中断向量表基址寄存器,可以直接修改中断向量表基址。
以Cortex-M3为例,它的中断向量表偏移量寄存器定义如下:
在这里插入图片描述注意:

Cortex-M3向量表的起始地址是有要求的:必须先求出系统中共有多少个向量,再把这个数字向上增大到是 2 的整次幂,而起始地址必须对齐到后者的边界上。

1.4 Cortex-M7架构处理器是怎么取中断向量的?

本例以基于Cortex-M7的stm32H743为例,分析Cortex-M7架构处理器是如何取中断向量的。

1.4.1 设置中断向量表偏移地址

在stm32H743复位后首先会执行Reset_Handler函数(此时中断均是失能状态,如果是由BOOT引导的APP,则需要在进入APP前将所有中断失能,避免在中断向量表偏移地址未被正确设置前进入中断导致不可预知的错误)。Reset_Handler函数内容如下:
在这里插入图片描述
在SystemInit函数的最后会设置VTOR寄存器,以修改中断向量表偏移地址:
在这里插入图片描述

1.4.2 CPU如何查找中断向量?

以stm32官方例程来说,中断向量表被放到了镜像文件的起始位置。查看其启动文件(startup_stm32h743zitx.s)如下:
在这里插入图片描述
和stm32H743参考手册定义的中断向量表一一对应:
在这里插入图片描述
注:
_estack是栈底地址,由于stm32H743栈向下生长,可以认为这是栈区最高地址。
查看.map文件,找到Reset_Handler、NMI_Handler函数的入口地址:
在这里插入图片描述
在这里插入图片描述
打开镜像文件,内容如下:
在这里插入图片描述
可以看到,Cortex-M7直接将中断向量放入中断向量表中,CPU根据中断ID及中断向量表偏移地址在中断向量表中对应的地址取出中断向量即可。至于为什么镜像中的中断向量是实际的中断向量+1,主要是为了避免产生fault异常:
在这里插入图片描述
说明:Cortex-M3处理器仅支持Thumb-2(文中所说的Thumb就是指Thumb-2)模式,企图转入ARM模式将会产生fault异常。
注:关于Thumb、ARM、Thumb-2指令集的说明如下:
在这里插入图片描述
Cortex-M7也仅支持Thumb-2指令集,可以看到stm32CubeIDE工程无法切换到其它指令集:
在这里插入图片描述

1.4 Cortex-A7架构处理器是怎么取中断向量的?

本例以基于Cortex-A7的stm32MP135为例,分析Cortex-A7架构处理器是如何取中断向量的。

1.4.1 设置中断向量表基地址(首地址)

在stm32MP135复位后首先会执行Reset_Handler函数(此时中断均是失能状态,如果是由BOOT引导的APP,则需要在进入APP前将所有中断失能,避免在中断向量基地址未被正确设置前进入中断导致不可预知的错误)。Reset_Handler函数内容如下:
在这里插入图片描述
上图红框标记处开始设置中断向量表基地址。
也就是将Vectors函数的地址作为中断向量表基地址,Vectors函数内容如下:
在这里插入图片描述
和Cortex-A7的中断向量一一对应(Reset_Handler对应于Not used):
在这里插入图片描述
.align 7表示Vectors函数地址按照2^7字节对齐,也就是按照128字节对齐。有关VBAR寄存器的描述如下:
在这里插入图片描述

1.4.2 CPU如何查找中断向量?

和Cortex-M7架构处理器不同的是,Cortex-A7架构处理器并不会直接将中断向量放到向量表中,它存放的通常是一条修改PC的指令或一条跳转指令(B)。官方说明如下:
在这里插入图片描述
这是因为Cortex-A7发生中断时不会直接从中断向量表取出中断向量,而是会将PC值修改到中断向量表里中断对应的地址。而这个地址存放的是一条指令,用来跳转到对应的中断服务函数。以stm32MP135为例,其中断向量表如下:
在这里插入图片描述
对应的.list文件如下:
在这里插入图片描述
可以看到stmMP135采用的就是官方推荐的第二种写法。例如,发生IRQ中断,PC会设置为0x2ffe0118,执行pc, [pc, #28]语句,执行完之后PC值为0x2ffe53bf。之所以是实际中断向量+1,是为了告诉CPU接下来切换到Thumb(Thumb-2)状态,需要执行Thumb(Thumb-2)指令:
在这里插入图片描述
为了实现在Thumb(Thumb-2)状态下处理异常/中断,本例在Reset_Handler函数中已经设置了SCTLR寄存器的T位值为1:
在这里插入图片描述
相关寄存器说明如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ARM state (T = 0) or Thumb state (T = 1)
说明:当异常/中断发生时CPSR寄存器的T位,会被设置为SCTLR的TE位的值。也就是说进入异常/中断CPU会切换到Thumb(Thumb-2)状态。
注:Cortex-A7所指的Thumb指令集就是Thumb-2指令集,因此本文写成了Thumb(Thumb-2)。
在这里插入图片描述
Cortex-A7什么时候在ARM状态?什么时候在Thumb(Thumb-2)状态?
在这里插入图片描述
ARM状态只能执行ARM指令,Thumb状态只能执行Thumb指令。当前执行的指令是ARM指令就处于ARM状态,当前执行的指令是Thumb指令就处于Thumb状态。可以通过CPSR寄存器的T位查看CPU处于什么状态,T=0时处于ARM状态,T=1时处于Thumb状态。至于在什么时候切换状态,编译器会帮我们生成能实现正确的代码。
以本文使用的stm32MP135为例,内部bootloader引导程序在SYSRAM中运行,第一个执行的函数就是Reset_Handler函数,它被 attribute ((naked, target(“arm”)))修饰,编译器会将该函数的指令全部编译为ARM指令,对应的‌函数原型及函数的汇编文件如下:
在这里插入图片描述
红框标记处可以看到指令大小均为4字节且全是ARM指令。
在这里插入图片描述

2 总结

(1)Cortex-M通过修改中断向量偏移地址来实现对中断向量表基地址修改,限制了它修改的范围。而Cortex-A7可以直接修改中断向量基址,灵活性大大增强,我们可以把中断向量表放到DDR、Flash、SRAM等任意存储器上。
(2)Cortex-M中断向量表存放的是中断向量,Cortex-A7中断向量表存放的是跳转/PC修改指令,通过修改PC来跳转到对应的中断服务函数。
(3)中断发生时,Cortex-M处理器直接在中断向量表找到中断向量并执行对应的中断服务函数。中断发生时,Cortex-A7会跳转中断向量表对应的中断偏移位置,然后执行一条指令修改PC值,跳转到对应的中断服务函数。
(4)Cortex-M7处理器取中断向量流程也适用于Cortex-M3/M4。

http://www.khdw.cn/news/53657.html

相关文章:

  • 京东做代码的网站磁力屋torrentkitty
  • 不用代码做网站的工具西安seo网站关键词
  • 内蒙建设信息网站百度代运营
  • 成都网站设计策划免费网络营销和传统营销的区别有哪些
  • 如何搭建asp网站网络推广网络营销外包
  • 个人主页网页设计案例百度seo手机
  • 网站根目录多出一.php百度识图搜索网页版
  • 永康门业微网站建设如何宣传推广产品
  • 如何做淘客网站关键词什么意思
  • 宁波网站建设服务公司电hua单页站好做seo吗
  • 批量做网站seo网站课程
  • 什么网站程序可以做抽奖页面长春网站优化体验
  • 广州番禺今日疫情网站优化公司哪家效果好
  • 网站建设需要材料seo优化推广工程师招聘
  • 六安人论坛百姓杂谈seo诊断方法步骤
  • 微信开发公司是哪个seo快速排名点击
  • 做网站 域名 网站 空间seo网络优化师招聘
  • 河北通信网站建设站长资讯
  • 网站构建的开发费用网络营销工程师前景
  • 西安专业网站建设公司十大网络舆情案例
  • 网站做双拼域名什么意思九幺seo优化神器
  • 网站建设的功能需求分析2022年国际十大新闻
  • 医疗网站建设流程今天的热搜榜
  • 网站首页设计怎么写长沙网络科技有限公司
  • flipaclip动画制作长沙百度快速优化排名
  • 安徽省铜陵市建设局网站现在有哪些网址
  • 济南建设网站公司今日国际新闻
  • 网站做浏览器兼容宁波seo快速优化公司
  • vs2017可以做网站吗想学编程去哪里找培训班
  • 网站程序设计外包优化网站