主题中讨论的其他器件: HALCOGEN
工具与软件:
大家好、TI 专家:
我最近遇到了 这篇文章: 利用 ARM Cortex-M MPU 实现零指针保护。 它概述了 一种巧妙的方法、通过在0x00处设置 MPU 区域(其中 MPU 会阻止所有读取/写入)、防止对地址0x00 (nullptr)进行读取/写入。 本文介绍了 Cortex-M 的这种无效保护、但对于 Cortex-R、以及在 TMS570上实现的基于 VIM 的硬件中断调度方法、该保护应该保持相似。 一个有趣的方面是、它在 Cortex-M 上运行时不移动矢量表(请参阅副标题"矢量表呢?") 段落中的表达式)、这对于无法移动矢量表的 TMS570而言极具吸引力。
为了移植到 TMS570、我设置了一个0x00 - 0x20之间的 MPU 区域(因为使用 VIM 时中断向量仅为32字节)、并将其声明为 MPU_PRIV_NA_USER_NA_NOexec 和 NORMAL_OINC_NONSHARED 。
我希望这足以避免 nullptr 读/写、但不幸的是、它不能立即在 TMS570LC4357上工作--我最后看到红色的错误 LED、调试器在 sys_intvecs.asm 中的 prefetchEntry 发生故障或之前断开。
有人知道此方法是否实际上可以移植到 TMS570以及如何实现的吗?
谢谢!