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.

[参考译文] MSP430F5418A:运行时变量变为错误的值

Guru**** 2589035 points
Other Parts Discussed in Thread: MSP430F5418A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/623049/msp430f5418a-variables-turn-to-wrong-values-while-running

器件型号:MSP430F5418A

我正在我的 msp430f5418a 电路板上实施一些信号处理算法。 在调试模式下、我观察到一些变量在一些计算后会变为错误的值。 该计算在内部有很多用于循环的、但对我观察到的变量没有任何作用。 我想这是因为一些溢出问题。 是否有人有类似的问题、想给我一些提示?

这里是我的内存分配和堆栈使用情况。 我希望他们能帮助诊断我的问题。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否提供一些示例、说明您的变量意外发生了什么情况? 您能否将算法分离到应用代码之外并仍然观察到问题? 您是否已正确初始化变量类型和大小以考虑所有计算结果?

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    发生这种情况的典型原因是您超出了数组的范围、或使用超出范围的指针。 我们很难看到逐1误差。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ryan、感谢您的回复。 让我更详细地解释一下我的代码和我正在使用的当前权变措施。

    高级代码结构如下所示:

    /*****  流程1*****  /

    C1 =

    /*****  流程2*****  /

    C2 =

    当我跟踪过程2时、C1发生错误。 在进入流程2之前、假设 C1 = 1。 执行 for 循环时、C1变为一些随机值(16789、类似的值、并且不一致的值)。  C1不应执行任何操作流程2。

    我当前的权变措施是、我只需将过程2放在过程1之前。 C1和 C2将始终是我所期望的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Keith、您好、感谢您的回复。 与上一篇文章一样、我可以通过重新排列代码来获得正确的结果。 因此、我相信这不是 OB1误差。 我在调试模式下跟踪了所有变量、并将它们与 MATLAB 仿真进行比较。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Liang 提供的更多信息。 您是否尝试增加系统堆栈和堆大小? 这在 Project Properties -> C/C++ Build -> Settings -> Tool Settings -> MSP430 Linker 内完成。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ryan、您好、我目前的堆栈和堆大小都是160。 我是否可以安全地更改尺寸范围? 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    梁好、

    这些限制是您的总 RAM 大小(16KB)和用于应用的 RAM 数量(从映像中删除~12.5KB)。

    此致、
    Ryan