TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430FR6972: 定义变量出错

Part Number:MSP430FR6972

程序定义的全局变量数组在执行某些函数的时候会变成随机数据,将变量定义到fram串口发送击败字节数据时会死机,如何解决

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛,由于美国感恩节假期将近,预计答复您的时间将稍晚,敬请谅解!

,

Cherry Zhou:

您好,看起来像是您的全局变量都在被覆盖,但是通过目前您提供的图片不太好判断具体原因。您能否提供全局变量的整体图?

,

HaiBin li:

您看看这个图片可以吗

,

Cherry Zhou:

好的谢谢您提供的图片,已经跟进给工程师,有新的信息会尽快给到您。

,

Cherry Zhou:

抱歉回复晚了。

这可能是缓冲区溢出或堆栈溢出引起的软件问题。 您能不能逐步浏览代码,确定一下变量被覆盖的确切位置?

此外您还可以参阅该应用手册,了解 MSP + CCS 的高级调试功能以帮助缩小问题范围:

https://www.ti.com/lit/slaa393

下面是一些相关问题您也可以参考下,其中包含有关如何检测可能的堆栈溢出的调试提示:

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/18766/stack-overflow-with-static-variables/72413#72413

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/396854/detect-stack-overflow

,

HaiBin li:

跟踪到变量被覆盖的确切位置之后,需要怎么做才能解决这个问题

,

Cherry Zhou:

HaiBin li 说:跟踪到变量被覆盖的确切位置之后,

一旦跟踪到确切位置后,请检查周围的code,确定一下是不是软件的问题。

比如您可以检查超出范围的数组访问、错误指针、堆栈溢出、新数据实际上是随机的还是有一个模式等等问题,也可以检查下变量和内存。

主要是想看看这个问题是否可以重现,哪些变量在哪些特定函数处被覆盖? 一旦能确定,您就可以review这些特定功能,然后就能解决编码问题。

,

HaiBin li:

找到具体位置了,是在串口发送数据的时候变量变了,您帮忙给看一下是什么原因,怎么解决

,

HaiBin li:

我串口发送函数发送207个字节数据,当发送到77个字节的时候开始覆盖我的全局变量数据,发送一个字节覆盖一个字节

,

HaiBin li:

我调用一个函数,当这个函数执行完返回的时候,单片机死机

,

Cherry Zhou:

好的帮您跟进给工程师了哈,应该下周会给您答复。

,

Cherry Zhou:

您好,写入发送缓冲区会清除 UCTXIFG。 请您将 usart0_fasong () 中的第 92 行放在第 91 行之前。 您可以参考 MSP UART Academy 和器件 UART 代码示例,了解如何构建 UART TX 和 RX 功能[academy, examples]。

此外其他变量 (yali_k/b 、 xunhuan _guding_flag 等) 是否为正确的值? 看起来也是调用 usart0_fasong () 修改的。

建议您检查 "buf" 和 "len" 的值,检查 UART TX 和 RX 功能,添加一个watchpoint,可在特定存储器访问时触发[link]。

这个问题是需要您在客户端调试的问题,因为我们不知道项目的具体细节和代码。

,

HaiBin li:

都确定到那个地址的指令出问题了还不行吗?我觉得就是芯片的bug

,

Cherry Zhou:

您的问题应该不太是与芯片有关,覆盖全局阵列一般是软件问题。

从您提供的信息来看,阵列是被放置在 RAM 中。 我们建议您使用 "persistent " pragma 将阵列放置在 FRAM 中,然后使用 FRAM 控制器将其锁定,使其不被写入。

这会防止意外 RAM 溢出等等问题。 有关于此操作的更多信息,请参阅 FRAM best practices app note的第六节:FRAM Protection and Security: https://www.ti.com/lit/slaa628

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR6972: 定义变量出错
分享到: 更多 (0)