大家好!初来乍到,请大家多多指教!我使用6678时遇到一个问题。
我用的软件环境是CCS5.3,板子是6678开发板,想利用6678的硬件内存保护机制,保护我们的代码。
对于共享外存(地址空间0x0c000000~0x0c400000),我想达到每个核只能访问分配给本核的空间的目的,希望当发生共享内存访问越界时,进入相应的中断服务程序。对于0核来说,XMC的XMUL共设置了0~9组,其他的是默认配置。XMC的XMUXL9和XMUXH9,0核能够读写0x0c000000~0x0c07ffff空间,设置XMUXL8和XMUXH8,对于0x0c000000~0x0c400000空间,不可读写,挂接mux内存访问错误事件是MDMAERREVT到12号中断上。因为MUX编号大的,优先映射,所以当0核读写0x0c000000~0x0c07ffff是可访问的,不会触发异常;当写地址0x0c080000,就应该触发MDMAERREVT事件。调试下我看到核0往0x0c080000地址写数据时,XMC错误地址寄存器0x08000200记录了错误访问地址0x0c080000,错误状态寄存器0x08000204记录了错误操作是本核写访问,但是不进MDMAERREVT中断服务程序,代码继续往后执行时,才进,中断服务程序中中读取错误地址寄存器和错误状态寄存器,然后通过写清除寄存器清除这两个寄存器的值。发现当代码中再有越界写时,错误能够被记录,但不再进中断服务程序了,为什么?而越界读时,进入L1D CPU访问错误中断服务程序中,L1D中记录的错误状态符合错误的实际情况,就是进入中断的时间有所延迟?