ZHCU876Z July 2001 – October 2023 SM320F28335-EP
编译器将源模块转换为目标文件。它可以将所有函数放在单个代码段中,也可以创建多个代码段。多个代码段的好处是链接器可以忽略可执行文件中未使用的函数。
当链接器收集要放入可执行文件的代码时,它不能拆分代码段。如果编译器没有使用多个代码段,并且特定模块中任何函数都需要链接到可执行文件中,则该模块中的所有函数都会链接进来,即使函数没有被使用。
一个示例是包含有符号除法例程和无符号除法例程的库 *.c.obj 文件。如果应用程序只需要有符号除法,则链接只需要有符号除法例程。如果只使用了一个代码段,则有符号和无符号例程都会链接进来,因为它们存在于同一个 *.c.obj 文件中。
--gen_func_subsections 编译器选项通过将文件中的每个函数放在其自己的子段来解决这个问题。因此,只有在应用程序中引用的函数才会链接到最终的可执行文件中。这将导致整体代码大小减小。
如果未使用此选项,则 C28x 编译器的默认值为“off”,CLA 编译器的默认值为“on”。如果使用了此选项但既未指定“on”也未指定“off”,则默认为“on”。