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.

[参考译文] RTOS/TM4C129XNCZAD:NDK 生成的任务中的堆栈溢出

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/595972/rtos-tm4c129xnczad-stack-overflow-in-ndk-spawned-task

器件型号:TM4C129XNCZAD

工具/软件:TI-RTOS

从 HTTP 服务器调用的 cgi 函数中,当函数调用 vsnprintf()时,我会偶尔得到栈溢出。  在大多数情况下,vsnprintf()使用的堆栈字节不超过分配给它的2048个,但它每隔18次左右溢出该数量。  这对 vsnprintf()来说并不是很好的行为,但我认为这是问题所在。  我想尝试增加任务的堆栈大小、但我不知道设置在哪里。  如何操作?  停止后、违规任务在 ROV 中为"dchild"。

我通过二进制代码删除搜索缩小了这个问题的范围,它随对 vsnprintf()的调用而来。  我已经尝试绕过 va_list/va_start/va_end 调用、以查看它是否与问题相关、但我这么做时没有任何变化。

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

    首先、我建议您查看 System_vsnprintf 而不是 vsnprintf。 堆栈使用情况应该更好。

    您可以通过.cfg 文件中的 Global. highTaskStackSize 设置来控制 HTTP 的子堆栈大小(或者、如果您没有对 NDK 使用.cfg 配置、请将 CfgAddEntry 与 CFGITEM_OS_TASKSTKHIGH 一起使用)。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将 vsnprintf()替换为 System_vsnprintf()可消除栈溢出,但最好了解栈控制。 谢谢!