AnsweredAssumed Answered

How to read the <Static Call Graph.html> file generated by ARM Linker?

Question asked by Lingjun Kong on Jul 30, 2017
Latest reply on Aug 5, 2017 by Lingjun Kong

I'm a little confused about the Stack Size, Thumb and Max Depth shown on the file. Which is generated by the ARM Linker.

1. Where could I found the information what these several words exactly meaning?

for example:


f_open (Thumb, 450 bytes, Stack size 608 bytes, ff.o(i.f_open))  [Stack]Max Depth = 840Call 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


I know the Max Depth is the Stack needed of the Longest Call Chain. Is that means, for this function, the stack it needed is exactly equal the Max Depth?

If so, what about the 'Stack Size'? Is which means the stack size of the current function itself needed?

If so, what's the 'Thumb'? Is which means that, 'Thumb' Instruction Set?

Could I say: Max Depth=Thumb + all Stack Size in the call chain + some other unknown exception?

2. How to read the Call Graph file? I've noticed that there are several piece in the file

z. Maximum Stack Usage = xxxx bytes + Unknown(Cycles, Untraceable Function Pointers) a. Call chain for Maximum Stack Depth b. Mutually Recursive functions c. Function Pointers d. Global Symbols e. Local Symbols f. Undefined Global Symbols

Is the 'Local Symbols' response to the functions which aren't referenced on the .h header file?

3. Why the call chain doesn't show the Heap Size of the function?

4. Could the Maximum Stack Usage indicate the real Max Stack Needed?

for example, one of my project, it shows Maximum Stack Usage = 78160 bytes + Unknown(Cycles, Untraceable Function Pointers)in the Static Call Graph file.

But the stack size I setted in the startup file is 0xDFA0 (I find out this value by experiment), in this size of stack, my program works well in most time, and in some case it doesn't work well. Why it could still work well?

5. Where could I get the knowledge about my question upper?

for these several questions, I've found answer on internet for about one whole but finally get nothing. Where and how could I learn about those knowledge?