Backtrace threadx堆栈顶部回溯的用途是什么?为什么大小不同?

Backtrace threadx堆栈顶部回溯的用途是什么?为什么大小不同?,backtrace,threadx,azure-rtos,Backtrace,Threadx,Azure Rtos,我在threadx的移植中看到,在每个线程堆栈的顶部有保留的未初始化字节,然后是16个零字节,就在这时,堆栈真正开始了 零字节在那里被称为backtrace。在arm端口,它是4个未初始化字节和4个零(例如),在ARC端口,这两个字节的大小都是16个字节(例如) 更重要的是,如果未定义TX_DISABLE_STACK_FILLING,则未初始化的字节将初始化为0xef 我的问题是: 为什么弧形移植和手臂移植有区别 为什么存在这些字节?算法中是否有使用这些字节的跟踪工具或其他东西,或者它们只是为了

我在threadx的移植中看到,在每个线程堆栈的顶部有保留的未初始化字节,然后是16个零字节,就在这时,堆栈真正开始了

零字节在那里被称为backtrace。在arm端口,它是4个未初始化字节和4个零(例如),在ARC端口,这两个字节的大小都是16个字节(例如)

更重要的是,如果未定义TX_DISABLE_STACK_FILLING,则未初始化的字节将初始化为0xef

我的问题是:

  • 为什么弧形移植和手臂移植有区别
  • 为什么存在这些字节?算法中是否有使用这些字节的跟踪工具或其他东西,或者它们只是为了“用手”在内存中看到这个内存没有改变

  • 是的,ARM和ARC端口非常不同,即不同的汇编代码、pragmas、intrinsic等。同样值得注意的是,不同的开发工具也在发挥作用。例如,ARC的主要开发工具是MetaWare(编译器/调试器),而在ARM上有IAR、ARM、GCC等


    至于堆栈回溯,这通常是这样设置的:当当前线程的代码中出现执行停止或断点时,调试器可以创建调用树。回溯字节模式有效地表示堆栈的顶部,并向调试器发出停止构建调用树的信号。当然,这是每个特定于调试器的,在本例中,是MetaWare调试器和ARM工具调试器之间的区别。对于堆栈上的0xEF模式,这对于开发人员的目视检查非常有用。ThreadX中的运行时堆栈检查功能也使用该模式(请参阅ThreadX用户指南文档)。此外,IAR和MetaWare调试器能够通过检查每个线程堆栈中的0xEF模式腐蚀来计算堆栈使用情况,并向开发人员提供非常有用的信息。

    @arye如果上述建议回答了问题,请接受它作为答案,以便对其他社区有益。