stm32地址写越界触发hard fault中断的机理是什么?
时间:12-12
整理:3721RD
点击:
我现在用的片子是stm32f103,
想问问arm能检测到数组写越界触发hard_fault的中断的机理是什么,有什么条件?
我用的片子好像没有MPU(内存保护单元)
那arm怎么知道我写越界了呢? 还有就是越了界一定会触发这个中断吗?
thx
想问问arm能检测到数组写越界触发hard_fault的中断的机理是什么,有什么条件?
我用的片子好像没有MPU(内存保护单元)
那arm怎么知道我写越界了呢? 还有就是越了界一定会触发这个中断吗?
thx
就算有MMU,buffer溢出也不见得能产生中断,抓越界这种事情代价是非常高的。如果想100%抓住会大幅影响效率,甚至不如不用C语言。
谢谢
我是故意设了一个野指针, 设一个循环让他加1清零
在hard_fault里打印堆栈里的PC值
发现都是在野指针写的过程中就跳转到hard_fault的
如果是破坏stack或者破坏其他数据
也应该是跑到涉及到这部分数据的code的时候才会出错吧
换句话说: 不应该在我乱写的时候cpu就知道我错了, 是不是这样?
破坏stack一般是不会有异常的,因为任务操作stack是标准动作。
一把来说写到了MMU的直读区域,或者禁止写的区域,就会有激发异常。
不知道你怎么测的,貌似Cortex访问不存在的地址,会引发硬件中午中断。记不太清了。
cortex-m3 的地址空间有一部分为只读的,向这些地址写数据会触发 hard fault。
cortex-m3 的文档里写的很清楚,根本用不到 MPU。