Re: PIC18F4550_PICDEM_FS_USB 修改中斷向量卻得編譯錯誤
|
||||
---|---|---|---|---|
中級會員
|
謝謝版主
發表於: 2009/8/24 9:46
|
|||
Programming is fun
|
||||
|
Re: PIC18F4550_PICDEM_FS_USB 修改中斷向量卻得編譯錯誤
|
||||
---|---|---|---|---|
中級會員
|
猜了一下, 把reset vector那段拿掉, 再試. 結果可用. 應該是0x0 和 0x800那段程式碼無法共同裝在0x6的長度空間中.
謝謝版主.
發表於: 2009/8/18 17:13
|
|||
Programming is fun
|
||||
|
Re: PIC18F4550_PICDEM_FS_USB 修改中斷向量卻得編譯錯誤
|
||||
---|---|---|---|---|
中級會員
|
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800 void _reset (void) { _asm goto _startup _endasm } #pragma code #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808 void _high_ISR (void) { ; } #pragma code _LOW_INTERRUPT_VECTOR = 0x000818 void _low_ISR (void) { ; } #pragma code 以上是PICDEM FSUSB的程式片段, 直接Copy & Paste. 我硬碟上的程式只有在中斷向量的值減去0x800而已, 其他程式碼全部沒改. 想測試不要boot mode的情況, 程式是否仍然有效. 結果就是以上的Error. 小弟的程式都是由0x0開始, 沒用過Boot mode. 看到0x800->0x0, 0x808->0x008, 0x818->0x018竟然會有編譯錯誤, 也不知如何是好. 我猜, 18F4550應該和18F4620都一樣可以從0x0開始吧. 在此請先進指導一下.
發表於: 2009/8/18 16:57
|
|||
Programming is fun
|
||||
|
Re: PIC18F4550_PICDEM_FS_USB 修改中斷向量卻得編譯錯誤
|
||||
---|---|---|---|---|
版主
|
C18 中斷進入點只能直接置放 goto 0xnnnn 的指令,請參考一下W401 教育訓練裡的第5-1 章的中斷設定方法。
http://www.microchip.com.tw/modules/w ... glefile.php?cid=4&lid=236
發表於: 2009/8/18 16:05
|
|||
|
PIC18F4550_PICDEM_FS_USB 修改中斷向量卻得編譯錯誤
|
||||
---|---|---|---|---|
中級會員
|
我將 PICDEM FSUSB 內附的程式中main.c起始和中斷向量, 由原先的0x800改為0x0, 0x808->0x008, 0x818->0x018, 編譯結果得到:
Error - section '_entry_scn' can not fit the absolute section. Section '_entry_scn' start=0x00000000, length=0x00000006 Errors : 1 看起來是C18在 _startup (void) 的起始位置的安排. 查過 C:\mcc18\src\traditional\startup 內的三個 c018*.c, 都有如下定義. #define RND 6 (1)請問版主, 如何解決此一問題? (2)是否這個length=0x00000006指的是就是RND=6? (3)改了RND的值, 會有何影響? 謝謝 另附 Linker 片段, FILES c018i.o FILES clib.lib FILES p18f4550.lib //CODEPAGE NAME=boot START=0x0 END=0x7FF PROTECTED //CODEPAGE NAME=vectors START=0x800 END=0x829 PROTECTED //CODEPAGE NAME=page START=0x82A END=0x7FFF CODEPAGE NAME=page START=0x0 END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED
發表於: 2009/8/18 12:18
Edited by ECP1 on 2009年08月18日 15:26:38
|
|||
|