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:在下次复位时、退出 LPM3会在_memset_16_loop 中挂起程序

Guru**** 2561130 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/598022/ccs-msp432p401r-exiting-lpm3-hangs-program-in-_memset_16_loop-at-next-reset

器件型号:MSP432P401R

工具/软件:Code Composer Studio

所有、

我现在对 MSP432P401R 有一个奇怪的问题。 我正在集成一个小型项目、它通过另一个较大的现有程序进入和退出 LPM3按钮按压操作。 它在第一次运行时工作良好、但在我单击黑色芯片"CPU Reset"按钮进行重置并重试后、我的代码甚至不会将其放入 main 的顶部、因为它卡在 ti/ccs6/tools/compiler/arm_15.12.2.cls/lib/src/memset_t2.asm 文件中的第146行。 很明显、这是一段在 main 之前运行的代码、但我很好奇为什么它会在我复位后停止我的程序、并且它在第一次运行时没有执行此操作。  

我注意到该文件引用了 eabi 格式。 我认为这可能与两个工程之间的编译器差异有关、或者与在工程中退出 LPM3有关、但我不知道会与此发生什么碰撞。 这两个项目之间唯一的另一个显著差异是、在工作项目中、我将 DCO 用于我的时钟(因为我使用的是红色评估板)、而这个项目我使用的是 HFXT 和 LFXT 晶体。  

如果有任何帮助,将不胜感激。 谢谢、

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

    我发现、使用"Restart"按钮将重置程序、并且它将像我预期的那样重新运行。 此外、当我从"CPU Reset"旁边的下拉框中选择"System Reset"时、它也将第二次运行、没有问题。 不过、使用"CPU Reset"按钮将在 main 之前的 memset_t2.asm 中挂起。

    是否有人知道这两个选项在复位后允许它正常运行的原因、而 CPU 复位会引入错误? 我很害怕继续使用两种方法中的一种、这两种方法允许它再次运行、因为我想我将来可以看到这个问题。

    感谢您的帮助、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的第一个建议是使用 CCSv7和 SimpleLink SDK 中的代码尝试此操作。 这是新项目的首选代码库。

    我将咨询我们的软件团队、了解这里是否有足够的信息来发现任何其他问题。
    此致、
    Bob
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助。

    我将项目导入到 ccs7中、但它仍在同一个文件中停止。 这次文件位于"ti/ccs7/tools/compiler/ti-cgt-arm_16.9.3.sps/lib/src/memset_t2.asm"中、几乎是相同的位置。

    我将尝试从 SimpleLink SDK 项目开始、并从此处将我的代码拉入其中。 如果我得到任何东西、我会告诉你。

    谢谢、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议从 TI 驱动程序示例中的"empty"项目开始、然后将任何源代码导入到该项目中。 这将确保正确设置所有项目设置和库指针。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还不错! 那是可行的。 唯一的细微差别是我从 Driverlib 示例中的"empty"项目开始、因为我不想使用 RTOS。 我现在可以重置并再次运行、而不会出现任何问题。 现在、这将是我的432个新项目基础。

    感谢您的帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不用客气。 很高兴这对您有用。
    -Bob
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    回顾一下、我再次提出了这个问题、尽管我能够将其追溯到我最近工作中添加的一个新变量。 它被称为"idleMode"、我在它所用文件的开头对它进行了初始化。 当我将其注释掉时、程序再次陷入_memset_16_loop 中。

    它只是一个 UINT8变量、它只更改了它的值以表明程序处于不同的状态-没有什么特别的。 我还尝试将其大小更改为 uint16、以查看它是否可能与存储器中的符号/变量边界相关、并运行了几次、但最终返回(几乎是随机的)。

    我还找不到原因、但我知道这次通过简单地声明它而不是在文件顶部初始化它来解决了这个问题。 现在不再进入 memset_16。