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.

[参考译文] MSP430FR6972:定义变量问题

Guru**** 2381440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1055384/msp430fr6972-define-variables-issue

器件型号:MSP430FR6972

大家好、

问题: 执行某些函数时、程序定义的全局变量数组变为随机数据、在发送拍字节数据时、为 fram 串行端口定义变量将崩溃。

客户希望知道如何解决。

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    听起来您的全局变量正在被覆盖、但很难根据上面的屏幕截图来判断其原因。 您能否显示这些全局变量的声明?

    谢谢、

    王国新

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 王乌里卡:

    感谢您的支持! 下图是否正常?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我是否可以知道有任何更新?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    这可能是缓冲区溢出或堆栈溢出引起的软件问题。 您能否单步执行代码以确定变量被覆盖的确切位置? 您还可以参阅此应用手册、了解 MSP + CCS 的高级调试功能、以帮助缩小问题范围: https://www.ti.com/lit/slaa393

    以下是一些有关如何检测可能的堆栈溢出[link1link2]的调试提示。

    谢谢、

    王国新

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 王乌里卡:

    感谢您的回答。

    [引用 userid="489743" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1055384/msp430fr6972-define-variables-issue/3911812 #3911812")您是否可以单步执行代码以确定变量被覆盖的确切位置? [/报价]

    在客户跟踪了确切位置后、我们应该采取下一步措施来解决此问题?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    一旦客户确定变量被覆盖的位置、我建议他们查看周围的代码以确定这是否是软件问题。 例如、它们应检查是否存在超出范围的数组访问、错误指针、堆栈溢出、新数据是否实际上是随机的、或者是否存在模式等 观察变量和存储器也会有所帮助。

    基本上、我们希望了解此问题是否可重现。 哪些变量在哪些特定函数等处被覆盖? 确定之后、客户可以查看这些特定的功能以了解任何编码问题。

    谢谢、

    王国新

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 王乌里卡:

    准确的位置是数据通过串行端口传输时 、变量会发生变化:

    串行传输函数发送207字节的数据、当发送到第77字节时、它开始覆盖全局变量数据、通过一个字节发送一个字节。

    调用一个函数、当该函数完成其返回时、单片分解为:

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    写入发送缓冲器清除 UCTXIFG。 我要在第91行之前将第92行放在 usart0_Fasong()中。 您可以参阅 MSP UART Academy 和器件 UART 代码示例、了解如何构建 UART TX 和 RX 函数[学院示例]。

    此外、屏幕截图中的其他变量(yali_k/b、xunhuo_guding _flag 等)是否为正确的值? 看起来它们也是由 usart0_Fasong()调用修改的。

    我建议客户检查"buf"和"len"的值、检查 UART TX 和 RX 功能、并添加一个可以在特定存储器访问[链接]上触发的观察点。

    再说一次、这是应该在客户的终端进行调试的内容、因为我不知道项目和代码本身的具体细节。

    谢谢、

    王国新

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Urica、

    感谢您的支持!

    客户怀疑芯片是否有任何缺陷。 (Becausehe 提供了确切的位置)。

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    我很怀疑这是芯片问题造成的。 覆盖全局数组通常表示存在软件问题。

    根据您的屏幕截图、阵列似乎放置在 RAM 中。 我建议客户使用"persistent" pragma 将阵列放入 FRAM 中、然后锁定不能使用 FRAM 控制器进行写入。 这将防止意外 RAM 溢出等项目。 有关如何执行此操作的更多信息、请参阅 FRAM 最佳实践应用手册的第6节"FRAM 保护和安全": https://www.ti.com/lit/slaa628

    谢谢、

    王国新