打开的 Properties 选项配置界面,其中 Settings / Managed Linker Script 页面就是链接文件里具体程序段链接设置,这个页面的最上面 Manage linker script 要保持勾选,勾选上则代表使用 IDE 的链接文件自动生成功能。公务员遴选在一个具体应用程序项目工程里,如果源文件仅包含标准 C 和汇编代码,那么程序段会被默认归纳为三大类:RO 段(函数代码,常量,全局变量初值等),RW 段(全局变量,重定向到 RAM 中函数代码等),Heap/Stack。IDE 里分别提供了这三类程序段的空间指定:
链接设置框的最后 Extra linker script input sections 框里单独为自定义 UserSectionName 段指定链接空间。比如工程 clock_config.c 文件里如下函数 UpdateSemcClock(),这个函数在默认的 RO .text 段里,RO 段都是链接在 Flash 里的,但是我们希望将这个函数重定向到 ITCM http://lx.gongxuanwang.com/sszt/39.htm里执行,所以我们可以使用 __attribute__((section("CodeQuickAccess"))) 链接器语法来修饰这个函数,然后在 Extra linker script input sections 框里将 CodeQuickAccess 段放到 SRAM_ITC_cm7 空间里即可。
RO 段一般从 Flash 的最前面开始链接的,.text 段在最前面,然后是 ramfunc 函数实体,最后是 .data_init 段(全局变量初值)。RW 段也是从 RAM 的最前面开始链接,.data 段在前,公务员遴选.bss 在后,然后是 Heap 和 Stack(Heap/Stack的具体位置是可以设置的,有 Start、End、Post Data 三种选择)。
小到 1KB 并放置到 SRAM_OC1,其余不变,此时可以看到 SRAM_DTC_cm7 空间消耗相比 3.1 节里少了 4KB,但 SRAM_OC1 空间消耗多了 1KB: http://lx.gongxuanwang.com/