Hello ALL! I would ask the next question... according http://www.keil.com/support/docs/2379.htm one must manually remove the reference between func2 and the ?CO?EXAMPLE1 segment and add MAIN ! FUNC2 reference between MAIN and FUNC2. But from App129 if I define code void (*func_array[])() = { func2 }; with the storing table in code space, I will get the correct call tree. Now is a question: if I would not make this overlay command like sad in the http://www.keil.com/support/docs/2379.htm bl51 EXAMPLE1.OBJ IX OVERLAY & (?CO?EXAMPLE1 ~ FUNC2, MAIN ! FUNC2) would I have any problem? How I understood it's harmless because there are no actual recursive calls in the code, just a reference from one item in the constant segment to another. Could somebody please make it a little bit more clear for me? Thank you very much, A.
Thanks. 1.Does it mean, if one use printf("xxxxx") function to declare the pointer table in CODE space has no any sense anymore. All reference anyway will be done manually. 2.If I understood you correct, my example will be executed correct,(because the data can't be overwritten - there is no real recursion here and the call tree is ok), but to make code clean from linker warnings which indicate recursive calls and to be sure, that any real recursion has occured one should make these overlay operations. is it correct? Thank you very much, with respect, A.
Additionally... For the LX51 linker/locater in the manual "Macro assembler and utilities" in the chapter "Pointer to a function in Arrays or tables" one can find a sentence: "The LX51 linker always ignores the references from constant segments to program code and requires only to add the function calls". I've tried it out and what I saw after I've analysed the map file... During overlay analysis it realy ignores these references, but does not remove it from the call tree, like it does SPEEDOVL in the BL51! It means, one still needs delete the references manually! With best regards, A.