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.

[参考译文] TDA2PXEVM:在 TDA2Px 中:- DSP1和 DSP2内核始终显示系统堆栈使用率超过98%。

Guru**** 2487425 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1428018/tda2pxevm-in-tda2px---dsp1-and-dsp2-core-always-showing-system-stack-usage-above-98

器件型号:TDA2PXEVM
Thread 中讨论的其他器件:SYSBIOS

工具与软件:

您好、TI:

我们在 SYSBIOS 操作系统中使用 TDA2Px 处理器。

我们将尝试读取所有内核的系统堆栈、以分析使用堆栈的情况、并根据使用情况尝试 触发 堆栈错误。

代码中显示的 DSP1和 DSP2系统堆栈使用情况如下:-

DSP1的 sysStack 用法->0x87218580                    dsp2的 sysStack 用法--> 0x8e0164f0
DSP1的 totalStack       --> 0x8721c2a8.                   DSP2的 totalStack       --> 0x8e01a088

  1. M40、M41、EVE1、EVE2、A15内核系统堆栈的使用情况看起来很好、低于10%- 20%、但 DSP1和 DSP2始终显示系统堆栈高于98%。

    问题1: 为什么我们仅获得超过98%的 DSP1和 DSP2系统堆栈使用量?  

  1. 我在.map 文件中看到如下所示的内存配置

文件夹                 Origin           Length            全波整流          Unused         属性      加注

DSP1_CODE         86800000        00400000         00066660      003999a0       RWIX
DSP1_DATA          86c00000        02800000         006b1c07      0214e3f9       RWIX
DSP1_GC_DATA      89400000        04400000         02d00628      016ff9d8        RWIX

dsp2_code         8d800000        00200000         00044800      001bb800       RWIX
DS2_DATA          8da00000        02600000         006af2c5       01f50d3b       RWIX

如上一行所示、DSP1和 DSP2核心的使用量非常少、但我们得到的堆栈使用量仍然非常高。

问题2:- 是否有任何 SYSBIOS API 可用于查看每个内核的正确堆栈大小?

 

请提供指导和支持来解决此问题。  

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

    尊敬的 Pankaj:

    栈大小取决于您对栈的使用情况、因此、我建议检查您的代码并查看 您是否在栈上分配了变量、这会将栈大小增加至98%。

    此致、

    Brijesh

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

    您好、Brijesh:

    若要检查栈大小、我们必须查看变量的分配。 我们已经看到变量用法并不多。  

    我们经过分析、为 DSP1和 DSP2分配的实际总栈大小为0x4000。 但它显示的是 DSP1和 DSP2的总大小如下所示
    DSP1的 totalStack       --> 0x8721c2a8.                   DSP2的 totalStack       --> 0x8e01a088

    如果映射文件中的 Satck 总大小为0x4000。 它应该为 DSP1和 DSP2显示正确的栈大小 但事实并非如此 .

    映射文件堆栈大小为0x4000时、其他内核也是如此、并且显示正确的堆栈大小。

    我们为 DSP1和 DSP2使用的技术相同。

    我不认为它与变量分配有关。 我认为堆栈大小不会在堆栈变量中更新。  

    请查看并支持我们。

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

    Pankaj,

    抱歉、下面的图片来自哪里? 它看起来不像打印堆栈大小、而是打印堆栈的起始指针。  

    DSP1的 totalStack       --> 0x8721c2a8.                   DSP2的 totalStack       --> 0x8e01a088

    映射文件无法打印堆栈 使用情况、因为它不知道运行时的堆栈使用情况。 因此、映射文件只能打印在代码中分配的总栈大小。 如果代码需要更多、您将需要分析代码并查看其需要更多栈的位置、然后相应地优化该代码或分配更多栈。  

    此致、

    Brijesh

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

    您好、Brijesh:

    感谢快速响应。

    是的、映射文件显示的是总 sattck 大小、那么总堆栈大小应在变量中更新、也像其他内核的 EVE1和 EVE2一样。  即使内核使用更多的堆栈、总堆栈大小也不应出错。 整个堆栈应该相同、因为它不会从任何位置更新。

    为什么不在 DSP1和 DSP2中更新它。

    在堆栈监控源文件(.cpp)中、我们将尝试读取所有内核堆栈大小总计和 uasge。

    在此源文件中、我们将尝试获取所有内核的堆栈使用量和总堆栈大小。

    const uint32 gSystemStackSize = reinterpret_SCRATION_SCRATION_STACK_SIZE <const UINT32>(&_TI_STACK_SIZE);  --> 此处、我们初始化  gSystemStackSize   "__TI_STACK_SIZE 为0x4000"

    M_sysStacks.totalStack = gSystemStackSize ;-->  此处初始化总堆栈大小。 "初始化时间"

    以下是所有内核的日志。  m_sysStacks.totalStack 和 total_stack  相同、所有数据均采用十六进制格式。

    a15_0 --> m_sysStacks.totalStack 4000 total_stack 4000\r\n\r\n>      "显示的总尺寸正确"

    eve2 ->m_sysStacks.totalStack 4000 TOTAL_STACK 4000\r\n>      "显示的总尺寸正确"

    eve1 ->m_sysStacks.totalStack 4000 TOTAL_STACK 4000\r\n>      "显示的总尺寸正确"

    dsp2 --> m_sysStacks.totalStack 8e01a088 TOTAL_STACK 8e01a088\r\n>         "显示的总尺寸错误"
    dsp1 --> m_sysStacks.totalStack 8721c2a8 total_stack 8721c2a8\r\n>         "显示的  总尺寸错误"

     

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

    您好、Brijesh:

    我们正在等待您的回复。

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

    您好!

    我们还在等待回复

    请查看并支持我们

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

    你(们)好  

    是否有通信网?