我正面临RANDOM控制器重置,' SYSRSTIV '寄存器根据用户指南给出值'0x0A',表示'安全违规(BOR)'。我搜索了许多论坛,发现了与该问题相关的几个主题,但没有帮助。
详细信息:
使用的控制器: MSP430F6634
问题:随机重启
假设
>嵌套ISR :但情况并非如此,因为默认情况下MSP430禁用全局中断,而在ISR中我确定我没有启用
>看门狗定时器(WDT):这不是这种情况,因为WDT导致'SYSRSTIV'寄存器读取值为0x18
>堆栈溢出:这是我最后的假设,但这似乎并非如此,因为我不断打印堆栈指针以检查它是否超出了限制,这并没有发生。
> DMA寄存器:在TI论坛中发现了类似的问题,提示DMA寄存器处理,DMA仅用于我们项目中的USB,禁用 USB完全没有帮助
数据表和用户手册中记录的很少,TI客户支持到目前为止没有任何帮助。我从3个星期开始努力解决这个问题,我无法解决它。
请帮帮我。
提前致谢。
答案 0 :(得分:1)
"安全违规"表示您的代码试图访问BSL的受保护内存区域。
错误的DMA编程可能会发生这种情况,但在您的情况下,您更有可能使用错误的指针。 (这可能是由其他一些错误指针引起的内存损坏的结果。)
答案 1 :(得分:1)
@CL。 谢谢为您的指导,这真的很有成效。
我使用 __ no_init 并记录了重置之前的最后一个函数,但是我无法用此结束,所以我使用 __ no_init创建了一个ARRAY 并记录了它在RESET之前的最后200个功能/位置,我今天能够知道这个问题。 (这是一个漫长的等待)
原因是:
我从数组中读取数据并计算CRC,由于数据溢出我得到了错误的长度(负值)并且指针继续读取E NTIRE RAM,DATA和CODE存储器最后在我获得RESET之前,最终得到了 BSL 内存。
我还有一个问题是:
1。如果我仅阅读数据,而不是操纵/覆盖这些位置的信息,为什么我安全违规。
2。为什么我只在读取指针位置 0x1010 (BSL内存)的值时才获得RESET,而不是在等任何其他位置读取代码存储器等也是BSL存储器从 0x1000 开始,但RESET仅在指针到达 0x1010 且NO从 0x1000复位到0x100F 。我很好奇。
@CL。再次感谢你:))