将 NEW_VECTOR_ADDRESS 设为 ITCM 偏移 0x180 处,则中断向量表被重定向到了按 0x180 对齐的地方,实测效果跟 2.1 节一致。
#define NEW_VECTOR_ADDRESS (0x00000180) 2.4 测试以 0x200 对齐的中断向量表将 NEW_VECTOR_ADDRESS 设为 ITCM 偏移 0x200 处,则中断向量表被重定向到了按 0x200 对齐的地方,6 个中断都能正常响应,毕竟是符合 ARM 手册里对齐规定。
#define NEW_VECTOR_ADDRESS (0x00000200) 2.5 测试结果总结因为 i.MXRT1011 最多仅 96 个有效中断,有些对齐测试不能完全覆盖,痞子衡后来又在 i.MXRT1176 上(最多 234 个有效中断)以同样方式测了一遍,最终总结到现象如下:
1. 当中断向量表以 0x80 对齐时: - 表中 (2n*0x80)/4 处开始的连续 32 个中断均能够正常响应,n 可取值 0 - 7 - 表中 ((2n+1)*0x80)/4 处开始的连续 32 个中断发生时,实际响应的却是表中((2n*0x80)/4 处对应的连续 32 个中断函数 2. 当中断向量表以 0x100 对齐时: - 表中 (2n*0x100)/4 处开始的连续 64 个中断均能够正常响应,n 可取值 0 - 4 - 表中 ((2n+1)*0x100)/4 处开始的连续 64 个中断发生时,实际响应的却是表中((2n*0x100)/4 处对应的连续 64 个中断函数 3. 当中断向量表以 0x200 对齐时: - 表中 (2n*0x200)/4 处开始的连续 128 个中断均能够正常响应,n 可取值 0 - 1 - 表中 ((2n+1)*0x200)/4 处开始的连续 128 个中断发生时,实际响应的却是表中((2n*0x200)/4 处对应的连续 128 个中断函数 4. 当中断向量表以 0x400 对齐时: - 表中前 256 个中断均能够正常响应 - 推测表中第 256 - 511 个中断发生时,实际响应的是表中 0 - 255 个中断 5. 当中断向量表以 0x800 对齐时: - 表中前 512 个中断均能够正常响应 6. 当中断向量表以 0x180 对齐时:未详尽测试,效果似乎与以 0x80 对齐一致 7. 当中断向量表以 0x280 对齐时:未详尽测试,第 100 个中断误触发第 68 个中断函数,第 136 个中断触发 HardFault 8. 当中断向量表以 0x300 对齐时:未详尽测试,第 100/136 个中断均触发 HardFault ...至此,Cortex-M中断向量表对齐原则痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。