微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > stm32地址写越界触发hard fault中断的机理是什么?

stm32地址写越界触发hard fault中断的机理是什么?

时间:12-12 整理:3721RD 点击:
我现在用的片子是stm32f103,
想问问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。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top