历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | ARM920T_内核 und与svc异常模式分析

2019-08-22 来源:eefocus

一、undefined异常模式

0. 当执行未定义指令时进入und模式,进入过程:


CPU跳至0x4地址执行代码,自动保存CPSR寄存器值至SPSR寄存器,我们要做的就是在0x4处跳转到另一段代码,用这段代码完成现场保护,以及异常处理,最后退出异常。此处使用NOR启动,并且在0x0处执行reset时已经将NOR中的所有代码重定位至SDRAM中,所以跳转时不能用相对跳转(b和bl),必须使用绝对地址跳转,这样CPU将到SDRAM(0x30000000)中执行代码。


ldr pc, =und /*vector 4*/

    und:

/*设置专属sp_und*/

ldr sp,=0x34000000

/*保护现场*/

stmdb sp!, {r0-r12,lr}

/*异常处理*/

bl print2

mrs r0,cpsr

ldr r1,=und_string

bl printException

/*恢复现场*/

ldmia sp!, {r0-r12,pc}^

und_string:

.string "und exception!"

.align(4)

 

1. 因为und模式有自己的专属sp_und所以第一步设置sp地址


2. CPSR寄存器已经有硬件自动保存,此处只需要保存r0-r12和lr寄存器(lr保存执行未定义指令时的下一条指令的地址),此处我加了打印调试信息的print函数,调试关键点:调试函数不能在进入异常后放在保护现场的代码之前,否则异常的现场被改变,之后程序必然跑飞。


3. 异常处理部分分别用r0和r1传出cpsr的值和字符串"und exception!"的地址,用printException函数打印出。


4. 最后恢复现场,当{  }中有pc时,加^会自动将SPSR的值恢复至CPSR。


5. 未定义指令部分:


ldr pc,=uart

uart:

bl uart0_init

bl print1

und_code:

.word 0xdeadc0de

6. uart是为了初始化串口,以便打印调试信息,und_code是未定义指令,此处有bug,注释掉bl  print1时不能发生未定义异常,未debug


输出结果:

cpsr值得M4-M0为11011同下图的数据手册中的值一致

2018.12.3补充,print1处的bug是因为print1改变了cpsr的值使0xdeadc0de成为不可执行指令,debug方法,去掉print1,未定义指令改为0xeeadc0de.


二、svc异常模式

0. 异常的进入与处理与und异常几乎一样,注意点为:


/* 复位之后, cpu处于svc模式

* 现在, 切换到usr模式

*/

mrs r0, cpsr      /* 读出cpsr */

bic r0, r0, #0xf  /* 修改M4-M0为0b10000, 进入usr模式 */

orr r0, r0, #0x10

msr cpsr, r0

 

/* 设置 sp_usr */

ldr sp, =0x33f00000

1. 执行swi 0x***  指令,内核从用户模式切换至svc模式,CPU跳至0x4地址执行代码,之后同und异常流程一样。


ldr pc, =swi /*vector 8*/

swi:

/*设置专属sp_svc*/

ldr sp,=0x33e00000

/*保护现场*/

stmdb sp!, {r0-r12,lr}

/*异常处理*/

mov r4,lr

bl print4

mrs r0,cpsr

ldr r1,=swi_string

bl printException

sub r0, r4, #4

bl printSWIVal

/*恢复现场*/

ldmia sp!, {r0-r12,pc}^

swi_string:

.string "swi exception!"

.align (4)

2. lr 保存了执行的swi 0x***  指令的下一条指令的地址,将lr-4即可得到swi指令的地址,printSWIVal打印了该处的值。


在将 lr 的值取出至r0前不能做其他操作,例如输出调试信息,否则 之前 lr 的值将被改变


3.输出结果:

cpsr的M4-M0为10011与数据手册一致

SWI val也与进入时的指令相同


推荐阅读

史海拾趣

Emulation Technology Inc公司的发展小趣事

随着技术的不断成熟,Emulation开始积极寻求与电子行业的合作伙伴建立战略合作关系。公司先后与多家知名半导体厂商、设备制造商以及系统集成商签订了合作协议,共同推动模拟和仿真技术在各个领域的应用。这些合作不仅拓宽了Emulation的市场渠道,还为公司带来了更多的创新机会。

Avery Dennison公司的发展小趣事

Avery Dennison与众多知名企业建立了紧密的合作关系,共同推动行业发展。例如,公司与利郎服饰的合作就是一个典型的例子。通过提供Embelex™系列装饰标、厂内打印解决方案、RFID解决方案以及3D标签打样数字化解决方案等,Avery Dennison助力利郎实现了数字化转型和业务扩张。这种合作模式不仅提升了双方的市场地位,也为整个服装行业带来了创新动力。

C&K公司的发展小趣事

为了进一步加强在全球市场的地位,C&K在2011年进行了一次重要的收购。这次收购不仅扩大了公司的业务范围,还提升了其设计和制造能力。通过这次收购,C&K得以在全球范围内提供更广泛的产品和服务,进一步巩固了其在电子行业中的领先地位。

ATOP_Technologies公司的发展小趣事

随着技术的不断进步,ATOP Technologies意识到要想在激烈的市场竞争中保持领先地位,必须不断进行技术创新和产品升级。因此,公司加大了在研发方面的投入,积极引进高端人才,加强与高校和研究机构的合作。经过多年的努力,ATOP Technologies成功开发出了一系列具有自主知识产权的工业自动化产品,并在市场上取得了良好的口碑。

ASM公司的发展小趣事

进入21世纪,ASM公司开始关注中国市场的潜力。随着中国经济的快速增长和半导体产业的蓬勃发展,ASM公司看到了巨大的商机。公司加大了对中国市场的投入,与中国半导体代工厂建立了紧密的合作关系,为中国市场提供了高质量的产品和服务。这一举措不仅促进了ASM公司在中国市场的快速发展,也为中国半导体产业的进步做出了贡献。

FlexiPanel公司的发展小趣事

FlexiPanel深知研发投入是企业持续发展的动力源泉。因此,公司每年都将大量资金用于技术研发和创新项目的实施。通过不断投入研发,FlexiPanel在RF模块领域取得了多项专利和技术突破,推动了整个行业的产业升级和技术进步。同时,公司还积极参与国际技术交流与合作,引进和吸收国际先进技术和理念,为企业的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

有谁认识熟”红外框”(触摸屏)的电子工程师

招聘熟”红外框”(触摸屏)的电子工程师 我公司想招一个电子工程师,要求:对”红外手写” (也叫触摸屏)非常熟悉的,专职和兼职都可以.工作地点:杭州.(也可在深圳),薪金优 ,有意者可联系我,或把简历发至公司邮箱:bearbear-bear@163.com电话:0755-82132 ...…

查看全部问答>

[笔记].Nios II 软核性能基准.[Nios II]

一些表格 表1 Nios II处理器系统的最大时钟频率(tMAX)(MHz)     表2 Nios II处理器系统的MIPS(每秒钟一百万个指令)       表3 在不同设备家族上的Nios II处理器系统的MIPS/MHz比     表4 Ni ...…

查看全部问答>

TMS320F240用哪个软件烧写?

知道的说下,找了好长时间了,有的说是CC4.1,有的又说不是,到底哪个软件可以呢 先谢…

查看全部问答>

【MSP430共享】基于蓝牙的高压线电流自动化检测系统设计

在高压危险场所,为提高操作人员的人身安全,使用隔空测量数据是非常需要的,因此采用蓝牙通信系统实现了对远离危险场所进行测量和记录所需数据。本系统使用超低功耗性能优秀的MSP430系列单片机作为核心控制器件,由蓝牙PDA接收信号并对其进行相应 ...…

查看全部问答>

原来ARM7上的ucosii系统要移植到cortex-m3的板子上,求指教

现在主要问题是这个系统原来跑在ARM7的平台上,现在因为某些原因要转移到STM32的平台上。   新的开发平台有现成的ucosii系统+UCGUI,我应该不用再移植了吧, 但是 原来系统里的控制任务要移植过来,不知道一般是怎么移植的,大家都是直接移 ...…

查看全部问答>

陶瓷贴片电容知识

通常大家所说的贴片电容是指片式多层陶瓷电容 (Multilayer Ceramic Capacitors),简称MLCC。它是在若干片陶瓷薄膜坯上被覆以电极桨材料,叠合后一次烧结成一块不可分割的整体,外面再用树脂包封而成的。具有 小体积、大容量、Q值高、高可靠和耐高温 ...…

查看全部问答>

AM335x平台 使用SD卡的建议

The table below lists the SD cards tested which have no issue on performance. 没有问题 The table below lists the SD cards tested which have poor performance. 表现不佳 …

查看全部问答>

EK-LM4F120 launchpad 之软件安装

我的CCS5是在官网下的就是速度慢     这个是在一个论坛里找到的           http://pan.baidu.com/s/1orfAu     主要这几个选项            剩下的默认就 ...…

查看全部问答>

MSP430G2553串口问题求助

在编写串口程序之前,小红板子上的32768hz的晶振要不要焊接。…

查看全部问答>

求解HT1621与LCD的连接

第一次用HT1621,看完手册后还是有些地方不解,HT1621的SEG0可以连接LCD的A1段电极也可以连接D1段电极,这个连接关系是不确定的,任意连接? 如果用来驱动多个LCD的话,公共电极COM就是用来选择要显示的LCD的,相当于数码管显示中的位选,这样理解 ...…

查看全部问答>