在标准开发中,我们习惯了“全自动”模式:代码写好,编译器自动分配地址。但在开发 Bootloader、OTA 升级、Flash 驱动 或 高性能 DSP 算法 时,你需要切入手动模式。
链接脚本(Linker Script)就是你手中的“上帝之手”,它决定了每一个字节的物理归宿。
1. 引言:打破编译器的“默认设置”
在 C 语言的标准世界里,你无法通过代码告诉 CPU:“把这个函数放在物理地址 0x2000 1000 处运行”。 但在嵌入式世界,这却是刚需。
-
场景 A (STM32): 你需要编写一个函数擦除 Flash。当 CPU 执行擦除指令时,Flash 总线会忙碌(Busy),此时 CPU 无法从 Flash 取下一条指令。如果你还在 Flash 里跑代码,系统就会死机。解决方案:把擦除函数搬到 RAM 里跑。
-
场景 B (RL78): 你想利用极速的 SADDR 区域(1 字节指令访问),或者必须保证某些常量表落在 Mirror Area 内。
-
场景 C (RTOS): 你想把 RTOS 的 Heap 强制隔离在外部 SRAM 中,保留内部高速 RAM 给堆栈使用。
实现这一切的工具,在 GCC 中叫 .ld,在 Keil 中叫 .sct,在 IAR 中叫 .icf,在 Renesas CC-RL 中叫 .dr。
2. 核心语法解剖 (以 GCC .ld 为例)
链接脚本的核心逻辑只有两步:圈地 和 分房。

最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



