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/TM4C123GE6PM:CCS/TM4C123GE6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/580302/ccs-tm4c123ge6pm-ccs-tm4c123ge6pm

器件型号:TM4C123GE6PM

工具/软件:Code Composer Studio

您好!

我的 TM4C123G 代码 工作正常、但当我向代码中添加两个 int 数据类型的新变量时、它们将获得默认值0x84和0x03 、即使我用0x00和0x00初始化它们、并且如果我将声明的位置更改为其他变量 变量工作正常、但另一个值的值会受到影响。 我的代码中包含 I2C、DMA 和 UART 的中断服务例程。

我尝试使变量变得易失性、并在 另一个文件中声明了所有变量、将该文件包含为头文件。 但它们都不起作用

解决该问题的任何方法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Akash、
    这些全局变量吗? 这些变量是如何在代码中稍后分配的? 如果变量在第一个文件中声明并且您希望在第二个文件中使用它们、则在第二个文件中使用变量之前、需要对变量进行外部声明。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议查看链接器生成的.map 文件中分配给变量的位置。 它们是否在堆栈末尾附近结束? 堆栈可能溢出了? 它们是否放置在某个数组之后? 代码的索引可能超出数组的大小。 在开始执行 main()时变量为0吗? 如果是这样、使用观察窗口中的变量单步执行代码、您可以识别它们何时损坏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Bob、
    当我看到.map 文件时、堆栈和数据段位置会相反。 以及如何检查堆栈是否溢出?

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

    最简单的方法是增加.stack 段的大小、看看这是否解决了问题。 右键点击工程并选择"Show Build Settings..." 然后在 Build->ARM Linker->Basic Options 下,更改堆栈大小。 在下面的示例中、我将堆栈大小增加到了512字节。

    由于堆栈从上到下使用(当使用堆栈时、地址会减小)、如果堆栈使用最低的 RAM 位置、则在堆栈溢出时、将获得数据中止。 在下图中、我用0xFF 填充了我的512字节堆栈、并运行了一个简单的 PWM 程序。 然后、通过查看存储器浏览器、我可以轻松地看到使用了多少堆栈空间。 在本例中、从0x200001FF 向下到0x200001D8。

    不要忘记导致此问题的其他可能的方法、即对数组进行过索引或指针损坏。

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