您好!
我们遇到了 IRQ 堆栈指针问题。
执行 pogram 初始化后、IRQ SP 指向地址0x08000600。 (标准 sys_core.asm)
在程序执行期间的某个点、指针变为地址0x08016b58。
我们使用的是 FreeRTOS 和 MPU。
一个任务对该区域没有写入访问权限、IRQ SP 在其更改后指向该区域。
当一个中断被执行并且这个任务处于激活状态时、这将导致一个数据中止异常。
我假设中断模式继承了活动任务的 MPU 配置。 (是这样吗?)
如果在中断期间另一个任务处于活动状态、且该任务对该区域具有写入访问权限、则不会导致数据中止。
在使用调试器测试某些项目期间、我们多次看到此问题。
我们当前正在尝试找到根本原因、这会更改 IRQ 堆栈指针。
不幸的是、行为似乎是随机的。 有时数据中止是在几个小时后引起的、有时是在15分钟后引起的。
为了进行调试、我使用调试器手动更改了 IRQ SP 的值。
您有什么想法吗、什么可能导致 IRQ 堆栈指针的改变?
根据我的理解、这是一个单独的 CPU 寄存器。 因此、即使是阵列溢出或无效软件、也不应导致此行为。
即使是中断本身中的堆栈溢出、也不应在中断被保留后导致 IRQ SP 更改为另一个值。
当然、在执行中断期间、堆栈指针会随着调用内部函数而减小。
这样做的原因可能是什么?