This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我将以高速率(1000Hz)向 TM4C123GH6PZ 微型器件的 UART 发送串行消息。 我注意到、在收到1500左右的良好消息后、微控制器将进入故障 ISR。 每次试运转期间、故障前的消息数量似乎并不完全相同。 故障状态寄存器= 0x0000.8200。 故障地址寄存器= 0x2000.8000。 它属于存储器映射上的"保留"部分。 我在论坛上找不到有关此故障地址的详细信息。 一条注释提到、这是微控制器在 SRAM 外运行时引起的。
有趣的是、数据表中的存储器映射中有一条注释: 注意:在存储器映射中、尝试在保留空间中读取或写入地址会导致总线故障。 此外、尝试在闪存范围内写入地址也会导致总线故障。
因此、听起来微型器件正在尝试访问保留地址0x2000.8000。 这是 SRAM 问题吗? 我还能做什么来确定此故障的原因?
感谢您的帮助、
CamK
我是否可以赞扬您为您的帖子所付出的关心、细节和努力? 干得不错。
现在-对于问题-假设(LPAD 上显示列出的 MCU)您正在使用 UART_0 -通过板载 ICDI MCU -您是否可以确认?
如此多的消息安全送达(并且处理得很好)这一事实(可能)会将一些责任转移到您的"数据源链"上。 (发起设备(PC?) 和电路板的 ICDI MCU)
您是否尝试过:
"新消息"是否可能在"完全/完全处理"之前到达、并且"重叠"会导致(或导致)您的问题?
这第二个回答在(所需)细节和清晰度方面"排在第一位-同样做得很好。
我建议您在您认为您的缓冲区需要的"顶部 SRAM 位置"上方放置一小段测试代码-可能接近200字节左右。 如果到达该 SRAM 位置、请让代码"暂停进程"。 通过这种方式、您应该能够确定缓冲区的"方式、位置和原因"(泄漏-超出规定范围)。
您的"缓冲器设计目标"不应该是"禁止超过缓冲器的专用 SRAM 范围?" 此类强制似乎尚未驻留-邀请(及时)此类 SRAM 溢出...
感谢 CB1。 只需尝试提供适当的信息、以便您的时间(以及我自己的时间!) 不会浪费。 我感谢各位的答复。
在创建检查/停止方面...
uint8* overflowptr =(uint8*) 0x20007F38; uint8 tempRxBuffer[180]; if (tempRxBuffer >= overflowptr) { while (1);//停止 }
这是正确的方法吗? 我是否会对每个大型数组声明执行相同的操作?
此致、
CamK
相信您"有了这个想法"、您必须用">="而不是仅用"="进行测试!
我会将溢出错误10-20字节(超出/超过)定位为"最大预期缓冲区填充位置"、以便您能够更快地检测到此类"泄漏"、从而确定问题的原因。
我们"知道"(现在)波特率和消息速率会影响您的问题的发生-您"提出两个问题"、以便问题更快、更显著地发生、这是否是值得的?