在 IAR 8051 編譯環境中,擴展程式碼存儲空間需要銀行切換機制。本文說明如何修改預設銀行切換例程以適配不同的硬體 SFR 埠地址。
8051\src\lib\iar_banked_code_support.s51-D?CBANK=PORTADDRESS
copy 8051\src\lib\iar_banked_code_support.s51 .\my_bank_switch.s51
編輯 my_bank_switch.s51,找到銀行切換埠定義處,將預設 P1 修改為目標 SFR:
; 原代碼
?CBANK EQU 90H ; P1 埠地址
; 修改為目標 SFR,例如 P3 (0xB0)
?CBANK EQU 0B0H ; P3 埠地址
# 使用 IAR 組裝器
a8051 my_bank_switch.s51 -o my_bank_switch.r51
# 替換運行時庫中的對應模組
# 方法:將 .r51 加入專案,連結器會優先使用專案中的模組
在專案的 .xcl 連結器配置文件中更新定義:
; 原配置
-D?CBANK=0x90
; 新配置(對應修改後的 SFR 地址)
-D?CBANK=0xB0
| 項目 | 要求 |
|---|---|
| 解碼邏輯 | 外部解碼電路需對應修改後的 SFR 埠位 |
| 時序要求 | 銀行切換指令執行期間不得發生中斷搶佔 |
| 初始化 | 啟動代碼中需配置該 SFR 埠為輸出模式 |
修改 IAR 8051 銀行切換例程的核心在於:源文件修改 SFR 地址 → 重新組裝 → 更新連結器定義 → 專案包含新目標文件。此過程無需修改編譯器內部邏輯,僅需適配硬體解碼電路的埠地址分配。建議將修改後的切換例程納入版本控制,作為專案特定的運行時組件管理。