硬汉嵌入式论坛

 找回密码
 立即注册
查看: 669|回复: 3
收起左侧

[技术讨论] 关于flash上中断地址的记录问题

[复制链接]

12

主题

36

回帖

72

积分

初级会员

积分
72
发表于 2025-1-10 12:55:38 | 显示全部楼层 |阅读模式
   各位大佬,请教一个问题,为啥flash上记录的中断地址,会比函数的实际入口地址大1?



NMI_Handler的中断函数入口地址,是0x080001F4,但是flash上显示的是0x08001F5,Memmanage_Handler的中断入口函数地址为080001F6,但是flash上显示的是0x08001F7,其他中断函数也有类似问题,这是什么原因导致flash上的地址比实际中断入口函数地址大1的呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-1-11 07:22:52 | 显示全部楼层
M内核芯片不支持ARM状态
Thumb-2指令集要求跳转地址的最低有效位(LSB)必须是1。这是因为Thumb-2指令集使用16位和32位指令,而ARM指令集使用32位指令。为了区分这两种指令集,ARM架构规定在跳转地址的最低有效位设置为1时,处理器将进入Thumb状态;而在最低有效位设置为0时,处理器将进入ARM状态。
回复

使用道具 举报

12

主题

36

回帖

72

积分

初级会员

积分
72
 楼主| 发表于 2025-1-11 20:30:22 | 显示全部楼层
eric2013 发表于 2025-1-11 07:22
M内核芯片不支持ARM状态
Thumb-2指令集要求跳转地址的最低有效位(LSB)必须是1。这是因为Thumb-2指令集使 ...

好的,明白了,谢谢硬汉哥
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-2-19 18:52:28 | 显示全部楼层
eric2013 发表于 2025-1-11 07:22
M内核芯片不支持ARM状态
Thumb-2指令集要求跳转地址的最低有效位(LSB)必须是1。这是因为Thumb-2指令集使 ...

硬汉哥,我也遇到了这个问题,实在搞不明白。假如MemManage_Handler函数入口地址是0x08000c78,它是第四个系统异常,对应地址0x0000000c开始的4字节内容为79 0c 00 08,比实际地址多了1。我在主程序使用((void (*) (void))0x08000c78)();或者((void (*) (void))0x08000c79)();甚至((void (*) (void))0x08000c77)都能正确跳转到MemManage_Handler函数,不理解为什么?再其他就会错误跳转到HardFault_Handler函数。
而且MemManage_Handler函数的反汇编是这样的:
[C] 纯文本查看 复制代码
0x08000c78: NOP
0x08000c7a: B 0x08000c7a

我也不理解为什么要加个NOP?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 18:16 , Processed in 0.046229 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表