鏈接器腳本定義目標 MCU 的**內存架構映射**,指導鏈接器將代碼段放入 ROM、數據段放入 RAM,保護特殊區域 (向量表、配置字等) 不被誤用。
LIBPATH . // 當前目錄搜索庫/目標文件
FILES c018i.o // 啟動代碼
FILES clib.lib // C 標準庫
FILES p18f4620.lib // 器件專用庫
CODEPAGE NAME=vectors START=0x0000 END=0x0029 PROTECTED // 復位/中斷向量表
CODEPAGE NAME=page START=0x002A END=0xFFFF // 用戶程序空間
CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED // ID 地址
CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED // 配置字
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED // 器件 ID
CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED // EEPROM 數據
ACCESSBANK NAME=accessram START=0x000 END=0x07F // Bank 0 低 128 字節 (快速訪問)
DATABANK NAME=gpr0 START=0x080 END=0x0FF // Bank 0 通用寄存器
DATABANK NAME=gpr1 START=0x100 END=0x1FF // Bank 1
... // gpr2 ~ gpr14
DATABANK NAME=gpr15 START=0xF00 END=0xF7F // Bank 15 通用寄存器
ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED // Bank 15 SFR 區
SECTION NAME=CONFIG ROM=config // 將名為 CONFIG 的代碼段放入 config 區域
STACK SIZE=0x100 RAM=gpr14 // 軟件堆棧大小 256 字節,放入 Bank 14
#pragma section NAME 關聯邏輯段| 指令 | 用途 |
|---|---|
| LIBPATH | 庫/目標文件搜索路徑 |
| FILES | 指定參與鏈接的輸入文件 |
| CODEPAGE | 定義程序內存區域 (ROM/EEPROM/配置空間) |
| DATABANK | 定義數據內存區域 (RAM Bank) |
| ACCESSBANK | 定義無需切銀行的快速訪問區域 |
| SECTION | 將邏輯代碼/數據段映射到物理區域 |
| STACK | 指定軟件堆棧大小及存放位置 |
| PROTECTED | 保護區域不被自動分配 |
CODEPAGE NAME=my_eedata ROM=eedata,源碼用 #pragma section NAME=my_eedataaccessram,減少 BANKSEL 指令開銷