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.

[参考译文] MSP432E401Y:调用 sscanf、snprintf 和其他 stdio 函数后、SysTick 不再运行

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1402104/msp432e401y-systick-no-longer-running-once-sscanf-snprintf-and-other-stdio-functions-are-called

器件型号:MSP432E401Y

工具与软件:

您好!

我在移植到 MSP432的代码方面遇到了一些问题。

SysTick 处理程序的工作方式通常完全符合预期、仅递增一个全局变量。  但是、我发现、如果我调用 sscanf 或 snprintf、则值会停止滴答声、并且我会遇到任何依赖延迟的函数。  为什么会发生这种情况?

提前感谢您。

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

    您是否声明内容不稳定?

    您是否会发生命名冲突?

    你如何读取你的 SysTick 变量? 当你读取它时、你是否关闭中断?

    您是否为 sscanf()或 snprintf()使用全局缓冲区? 您是否可以对 SysTick 变量进行编号?

    你是否增加了堆栈空间- snprintf()是一个真正的堆栈 HOG。

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

    它是一个易失性变量

    我不认为这是命名冲突、因为问题仅发生在 snprintf 或 sscanf 中

    我目前没有使用中断来读取它。  我仅在 delay 函数中读取它、仅在处理程序中写入。

    我不认为我会把它翻出来吗?  对于 sscanf、我从一个相当小的字符串(1个字符加上终止字符、但将来会更长)读取为整数。

    我确实显著增加了堆栈空间。  你认为我应该有多大的额外?

    感谢你能抽出时间。

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

    如果您使用的是 launchpad、您可以在 SysTick 处理程序中切换 LED、以查看其是否确实停止了。

    堆栈加倍应该足够了。

    确保缓冲区大小与 snprintf()中的"n"设置匹配。

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

    我会在 Keith 的注释中添加大量堆容量。 C 标准函数(如 printf)会占用大量内存空间。  

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

    我似乎总是忘记了堆!

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

    堆栈的大小已经增加了很多、但我添加了更多内容。  我把它提高到2048字节,这似乎是疯狂的,但它似乎现在工作.

    因为没有递归或任何东西、我不会期望太多地使用它。

    感谢你的帮助

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

    您会建议堆大小是什么?  在堆栈空间大幅增加后似乎可以正常工作、但添加一些堆空间似乎并不糟糕。  谢谢你。

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

    可以在链接器配置下更改堆大小。 请参见下文。