gpt4 book ai didi

c - 如何读取ARM Linker生成的

转载 作者:行者123 更新时间:2023-11-30 16:43:17 27 4
gpt4 key购买 nike

我对文件上显示的堆栈大小、拇指和最大深度有点困惑。它是由 ARM 链接器生成的。

<强>1。我在哪里可以找到这几个词的确切含义的信息?

例如:

f_open (Thumb, 450 bytes, Stack size 608 bytes, ff.o(i.f_open)) 

[Stack]
Max Depth = 840
Call Chain = f_open ⇒ dir_register ⇒ dir_find ⇒ dir_next ⇒ create_chain ⇒ put_fat ⇒ move_window ⇒ sync_window ⇒ disk_write

[Calls]
>> get_fattime
>> st_clust
>> remove_chain
>> move_window
>> ld_clust
>> inc_lock
>> follow_path
>> find_volume
>> enq_lock
>> dir_register
>> chk_lock

我知道最大深度是最长调用链所需的堆栈。这是否意味着,对于这个函数,它所需的堆栈恰好等于最大深度?

如果是这样,“堆栈大小”怎么样?这是否意味着当前函数本身需要的堆栈大小?

如果是这样,“拇指”是什么?这是否意味着“Thumb”指令集?

我可以说: 最大深度=Thumb + 调用链中的所有堆栈大小+一些其他未知异常

<强>2。如何读取Call Graph文件?我注意到文件中有几部分

z。最大堆栈使用量 = xxxx 字节 + 未知(周期、不可追踪的函数指针)
A。最大堆栈深度的调用链
b.相互递归函数
C。函数指针
d.全局符号
e.本地符号
F。未定义的全局符号

“本地符号”是否响应 .h 头文件中未引用的函数?

<强>3。为什么调用链不显示函数的堆大小?

<强>4。最大堆栈使用量能否表明实际需要的最大堆栈?

例如,我的一个项目,它在静态调用图文件中显示最大堆栈使用量 = 78160 字节 + Unknown(Cycles, Untraceable Function Pointers)

但是我在启动文件中设置的堆栈大小是0xDFA0(57248字节,我通过实验发现这个值),在这个大小的堆栈下,我的程序在大多数情况下都运行良好,但在某些情况下无法运行出色地。为什么它仍然可以很好地工作?

<强>5。我在哪里可以获得有关我的问题上部的知识?

对于这几个问题,我在网上找到了大约一个答案,但最终一无所获。我在哪里以及如何学习这些知识?

谢谢。

最佳答案

  1. 书籍、文档。或者通过谷歌搜索并在这里询问。
    我找不到 the callgraph 的非常详细的文档现在在信息中心,但我认为:

    f_open (Thumb, 450 bytes, Stack size 608 bytes, ff.o(i.f_open))

    • Thumb 是指令集模式。
    • 450 字节 是函数大小。
    • 608 字节 是可预测的堆栈深度。 它不能跟随中断!
    • ff.o(i.f_open) 是链接器放入的对象。
  2. 它为您提供可以分析的信息报告。
    z。最大可预测堆栈使用量。
    A。它向您显示调用最多函数的位置。
    b.它显示recursive功能。这些可能很危险。
    C。它列出了所有函数和符号。
    e.局部符号是非全局符号。基本上都是static
    F。我不知道未定义的全局符号是什么。我的项目似乎没有。

  3. 堆是 malloc 的运行时使用。这是不可预测的,因为可以根据其他运行时值定义 malloc 的大小。你使用堆吗?

  4. 这是很多的堆栈。这就是堆栈的可预见的用途。基于函数调用和自动变量。它不考虑中断。因此,如果您有一个堆栈,则需要手动计算最坏情况的中断路径。 (Cortex M4 使用两个堆栈)
    这将是:最大堆栈+该时间内所有允许的中断+故障处理程序。

  5. ARM 信息中心提供有关核心和工具链的文档。根据您的教育程度,您可能也见过这些科目的教授。

关于c - 如何读取ARM Linker生成的<Static Call Graph>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45394045/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com