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.

[参考译文] CCS/MSP432P401R:更改变量而不进行设置

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/941854/ccs-msp432p401r-variables-are-changed-without-setting

器件型号:MSP432P401R

工具/软件:Code Composer Studio

您好!

什么类型的状态会导致变量值在不设置的情况下发生更改?

我正在创建一个用于牙科摄像机控制的新项目。

有两个变量本身总是改变值、但没有针对变量设置的操作。

我是随机发生的。

我在硬件的 LCD 上打印了该变量、即使没有 I/P 或 O/P 操作、它也完全被更改。

我已将优化级别设置为关闭。

编译器版本为 TI v18.12.3.LTS

CCS 版本为版本9。

如何解决恼人的问题?

BR、

Yu-Chuan、Chen

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

    于传

    我建议在变量上设置一个观察点。  观察点是一种断点类型、您可以将其配置为在地址或变量被写入时停止。  

    可能是您不知道正在写入的内容。  可能是溢出问题。  以下是一些有助于跟踪问题的资源:

    https://dev.ti.com/tirex/explore/node?node=ABOji8.duIdHhzsJkKch3A__FUz-xrs__LATEST

    https://dev.ti.com/tirex/explore/node?node=AOy1zjoxkuPsN0EDD.LmQw__FUz-xrs__LATEST

    https://www.youtube.com/watch?v=JlHLqzsb3D4

    https://dev.ti.com/tirex/explore/node?node=AI6Jk93wA.OZd6xU.x.PHw__FUz-xrs__LATEST&search=stack%20overflow

    此致、

    John

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

    尊敬的 John:

    感谢您提供调试方法。

    在带有观察点的调试模式中、除了设置之外、变量不会改变。

    但是、在我按下"调试终端"后、让硬件自行运行、变量发生了变化。

    更改的结果超出设置范围。

    在项目中、更改的变量的设置范围为0x1000至0x18C8。

    变量更改后、值变为0x0000。

    另一个变量用作标志、我使变量的值为0或1。

    它会更改为一个奇怪的值、并且每次发生故障时该值都不相同。

    (我在硬件的 LCD 上展示了它们、因此我可以知道变量的值)

    如果我使用你告诉我的观察点、问题就永远不会发生。

    请告诉我接下来可以做些什么来解决问题?

    BR、

    Yu-Chuan、Chen

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

    于传

    我会尝试增加堆栈大小。

    您描述的可能是堆栈溢出。 但是、无论您是否在调试器中运行、都应该发生这种情况。

    https://www.microcontrollertips.com/faq-avoiding-stack-overflow-embedded-processors/

    此致、

    John

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

    尊敬的 John:

    这是我第一次遇到这个问题、感谢您的介绍。

    我实际上可以做什么来解决堆栈溢出问题?

    或者、我是否可以调整任何选项来增加 CCS 或 MSP432中的堆栈大小?

    BR、

    Yu-Chuan、Chen

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

    于传

    您可以在此处的项目选项中调整堆栈大小:

    此致、

    John

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

    尊敬的 John:

    感谢您的回答、我将尝试一下。

    在你的回复之前、我尝试更改变量数量、但没有发生问题。

    我不知道这种方法是否可以解决问题。

    如果问题是没有缓冲区、我应该减小变量的数量、使其具有更大的空间、对吧?

    项目中有一个名为 UART_Data[50]的变量数组。

    我将其更改为 UART_Data[30]、但问题仍然存在。

    我将其更改为 UART_Data[80]、未发生故障。

    我觉得很奇怪,我不明白为何会这样发生。

    BR、

    于传陈

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

    于传陈

    我本来希望较大的数组产生溢出。  我仍然会继续增加堆栈大小、看看这是否有用。  假设这些是局部变量。

    此致、

    John

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

    此外、请非常仔细地检查任何使用指针的代码。 请特别仔细查看循环通过数组的任何代码、以确保访问的范围不超过数组的范围。

    另一种可能导致这种情况的错误是为字符串分配足够的空间、但最后忘记为'\0'分配空间

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

    尊敬的 John 和 Keith、

    John、

    我会不断尝试并告诉您结果。

    实际上、变量是全局变量。

    Keith、

    该数组不适用于字符串、而是用于 UCSI_Ax 通信。

    BR、

    于传