本文簡述如何在MPLAB C18環境中,將專案檔的起始位址改為0x1000,使Debug、Release時可不必額外設定
其實改用XC8後,用到的機會應該不多了,但還是當作歸檔,稍微記錄一下
概念:
調整C018i中的進入點,設備上電、由0x00開始執行後後,初始化完成即轉跳至0x1000,interrupt則轉跳至0x1008
關鍵字:Linker script、C018i.c、Hexmate、remap
c018x.c簡單說明
負責將做些預設初始化、轉跳至Main():
| 檔名 | 說明 |
|---|---|
| c018i.o | 有初始化 |
| c018i_e.o | 有初始化,延伸模式 |
| c018.o | 無初始化 |
| c018_e.o | 無初始化,延伸模式 |
步驟:
1. 修改c018i.c
找出c018i.c,複製一份至專案檔下,並由MPLAB加入該檔案
void _entry(void)中之轉跳位址由_startup改為0x1000
在_entry下面新增:
#pragma code High_IV = 0x0008
void High_ISR (void)
{
_asm goto 0x1008 _endasm
}
#pragma code
2. 修改Linerscript(以18F67k22為例)
CODESTART段中,新增:(注意DEBUG與RELEASE都要設定)
CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED
CODEPAGE NAME=vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x1FBFF (原有項目)
CODEPAGE NAME=vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x1FBFF (原有項目)
-新增booloader與vectors所佔的空間(新的中斷指定在0x1000-0x1029間
將FILES c018i_e.o註解掉,使專案直接使用我們import的c018i.c檔案
3. 修改Main.c檔,在最上方新增:
extern void _startup (void);
#pragma code Remap_RESET_VECTOR = 0x1000
void Remap_entry (void)
{
_asm goto _startup _endasm
}