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/TM4C1237H6PGE:sprintf、vsnprintf 导致崩溃

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/637850/ccs-tm4c1237h6pge-sprintf-vsnprintf-causing-crash

器件型号:TM4C1237H6PGE

工具/软件:Code Composer Studio

我刚刚使用 CCS 版本7.3.0.00019为 TM4C1237H6PGE 编译器 TI v17.9.0.STS 创建了一个项目。 当我尝试调用 sprintf 或 vsnprintf 时、程序会锁定。 我将闪烁函数放置在 faultISR()内,但看起来我从未实现过。 我已将 ARM 连接器->基本选项下的堆设置修改为1024的值、并且 ARM 编译器->高级选项->语言选项-> printf/scanf 支持级别设置为完全。 我在以前的 CCS 项目和版本上从未遇到过这种情况、因此我需要一些指导。

谢谢、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否正在使用 RTOS? 当它锁定时、如果您停止 CPU、PC 在哪里? 它是否位于中止循环之一中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试回复我自己的帖子、该按钮不会执行任何操作(我使用的是 Chrome)。 无论如何、我会切换到 IE、很显然我可以发布回复。

    自我最初发布以来、已经发生了很多事情、但网站不会让我来填充您的信息:

    1. 我没有使用 RTOS。
    2. 我插入了调试器、  在解释%字符时、它在 tisprintf 函数内部发生了故障。
    3. 它导致了一个故障 ISR
    4. 我做了一个裸骨头项目, 并且能够做 sprintf。
    5. 然后、我开始系统地删除我的项目的组件。
    6. 在我注释掉大小相当大(3k) 的物体的实例化后、sprintf 退出崩溃。
    7. 然后,我转到 Properties->Build->Arm Linker->Basic Options,并将堆栈大小从1024增加到10240。
    8. 这似乎解决了问题。

    我有一个 UART 类、其 Rx 和 TX 缓冲区分别为512字节和256字节。 我有一个经理级实例化了三个 UART 实例(这使我的堆栈不开心)。 我可能会改用指向这些缓冲区的指针来移动这些缓冲区。

    我的结论是否合理?

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、有道理。 很高兴您找到了这个问题、非常感谢您更新您的状态。