主题中讨论的其他器件: CC3100
您好!
我使用的是 TMS570LS0432微控制器、有时在从存储器读取数据时会出现"_dabort"错误。 在调试模式下、我在文件'sys_intvecs.asm'中设置断点、其中'_dabort'操作为(请参阅图片)。
前两个'_dabort'调用是在'System_selftest.c'中的函数 checkRAMECC (void)在这两行中执行的:
/*读取损坏的数据以生成双位错误*/ ramread = tcramA2bit; ramread = tcramB2bit;
这里调用了'ramErrorFound'、但随后未调用'ramErrorReal'、因此我假设没有 RAM 错误。 然后 CPU 被恢复并且程序继续运行(对于我来说、只要程序在'_dabort'调用后继续运行、这个运行方式不会引起任何问题。
启动后、我的程序正常运行几秒钟、但随后再次调用'_dabort'。 这一次'noRAMerror'被调用、CPU 在其中止的位置被恢复。 问题是、当 CPU 再次尝试执行命令行时、会再次调用'_dabort'、因此它最终会进入无限循环。 '_dabort'调用由以下函数引起:
uint32 spiTransmitData8Bit (/*... */ uint32长度、uint8 * srcbuff){ uint16 Tx_Data; //... while (length!= 0U){ //... TX_Data =* srcbuff;<--- 尝试读取 scrbuff 时调用_dabort //发送 TX_Data ... srcbuff +; length--; } //... }
奇怪的是、在出现'_dabort'错误之前、此函数已成功执行很多次。
我最后发现的是指针'scbuff '指向0x08008000、而调试器显示"Error:memory map prevented reading"(错误:内存映射阻止读取)(请参阅图片)。
现在我想知道:
- 此错误消息意味着什么?
- 如何阻止'_dabort'调用?
- 我可能内存不足?
我已经在这些主题上阅读了:
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/301090?TMS570-abort-on-startup
https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/301325/1050075
但我自己无法找到解决方案。 因此、我希望有人能帮助我解决这个问题。
感谢您的回答
此致、
米歇尔