• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users






Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#8
新會員
新會員


查看用戶資訊
我在bootloader程序中這樣編寫
#define MPROG_START 0x000000
#define RM_RESET_VECTOR 0x1000
#define RM_HIGH_INTERRUPT_VECTOR 0x001008
#define RM_LOW_INTERRUPT_VECTOR 0x001018
void high_isr(void);
void low_isr(void);

#pragma code high_vector=0x0008
void interrupt_at_high_vector(void)
{
_asm
goto high_isr
_endasm
}
#pragma code
#pragma interrupt high_isr
unsigned char Cnt=0;
void high_isr(void)
{
unsigned char isr_tmp;

if(bootloader==0x5a)
{
_asm
goto RM_RESET_VECTOR+0x08
_endasm
}
}
#pragma code low_vector=0x0018
void interrupt_at_low_vector(void)
{
_asm
goto low_isr
// goto RM_LOW_INTERRUPT_VECTOR
_endasm
}
#pragma code

#pragma interrupt low_isr
void low_isr(void)
{
if(bootloader==0x5a)
{
_asm
goto RM_RESET_VECTOR+0x18
_endasm
}
}
#pragma code
bootloader的lkr函數如下:
// $Id: 18f85j10i.lkr,v 1.2.2.1 2006/01/08 22:33:35 curtiss Exp $
// File: 18f85j10i.lkr
// Sample ICD2 linker script for the PIC18F85J10 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED
CODEPAGE NAME=boot START=0x2A END=0xfff
CODEPAGE NAME=rm_vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED

ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7F3
DATABANK NAME=dbgspr START=0x7F4 END=0x7FF PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED

SECTION NAME=CONFIG ROM=config

STACK SIZE=0x100 RAM=gpr6
主程序中這樣定義
#pragma code _HIGH_INTERRUPT_VECTOR = 0x001008
void interrupt_at_high_vector(void)
{
_asm
GOTO high_isr
_endasm
}
#pragma code
c018i.c作爲source code,改變如下
#pragma code _entry_scn=0x001000
void
_entry (void)
{
_asm goto _startup _endasm

}
主程序的lkr函數是:
// $Id: 18f85j10i.lkr,v 1.2.2.1 2006/01/08 22:33:35 curtiss Exp $
// File: 18f85j10i.lkr
// Sample ICD2 linker script for the PIC18F85J10 processor

LIBPATH .

//FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED
CODEPAGE NAME=boot START=0x2A END=0xfff PROTECTED
CODEPAGE NAME=rm_vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED

ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7F3
DATABANK NAME=dbgspr START=0x7F4 END=0x7FF PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED

SECTION NAME=CONFIG ROM=config

STACK SIZE=0x100 RAM=gpr6
這樣編寫bootloader和主程序是合理的嘛?機器一直到執行完bootloader程序后就跑不起來了,不知道這個問題應該怎麽查找。
我在MPLINK的數據手册中查找到當bootloader函數用MPASM編寫時可以用版主給的方法,但用C語言編寫bootloader函數時用的是跟版主不一樣的方法。不知道是否有區別,我也用另外一種方法嘗試去做了,也是同樣的錯誤。
實在不知該怎么解决這個問題了,謝謝版主能够指點一下。

發表於: 2007/12/11 16:27
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#7
版主
版主


查看用戶資訊
中斷是硬體的設計,所以位址是固定不變的。所以你要在 0x0008 及 0x0018 的地方坐一個中斷向量轉移的動作。所以要修改一下 Bootloader 0x0008 的地方直接放入 goto 0x1008 這樣才會執行你的中斷程式。

發表於: 2007/12/11 8:58
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#6
新會員
新會員


查看用戶資訊
版主,您好!
我在程序中增加了中斷的轉移
#pragma code high_vector=0x1008
void interrupt_at_high_vector(void)
{
_asm
GOTO high_isr
_endasm
}
#pragma code

#pragma interrupt high_isr
void high_isr(void)
用ICD2調試發現不能正常的進入中斷,就不知這是爲什麽了?
還有我的bootloader程序是用C語言寫的,可以用您說得方法修改嘛?謝謝版主能幫助我~^_^

發表於: 2007/12/11 8:19
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#5
版主
版主


查看用戶資訊
這樣改的方式是正確的,需再注意一下中斷 0x08 & 0x18 的轉移。你可以先檢驗一下起始位址改到 0x0100 後,將 lst 檔案打開看看編譯過後的位址是否正確並將原先的中斷作轉移後利用 ICD2 看看程式是否能正確執行,最後才做 bootload 的測試。這樣問題就比較容易找出來。

發表於: 2007/12/10 11:24
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#4
新會員
新會員


查看用戶資訊
我明白版主的意思了,我將c018i.c另存爲一個.c文件,保存再source files中,將c018i.c文件改爲如下:
#pragma code _entry_scn=0x001000
void
_entry (void)
{
_asm goto _startup _endasm

}
在18f85j10i.lkr中改變如下:
//FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF
幷且將主程序的中斷地址也改變了,如下:
#pragma code high_vector=0x1008
這樣改過以後,生成了hex文件,并在bootloader中加載了,但是程序不能正常運行。
所以這樣改過以後程序是否是正確的,我又試著通過這樣的方法將地址還是改爲0x0000,就是改變如下:
#pragma code _entry_scn=0x000000
void
_entry (void)
{
_asm goto _startup _endasm

}
在18f85j10i.lkr中改變如下:
//FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x0029 PROTECTED
CODEPAGE NAME=page START=0x002A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF
幷且將主程序的中斷地址也改變了,如下:
#pragma code high_vector=0x0008
下載了這個程序,還是不能正常運行,我想知道我這樣改是否正確?謝謝大家的幫助^_^


發表於: 2007/12/10 10:12
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#3
新會員
新會員


查看用戶資訊
很感謝版主關注我的問題,這個問題我已經想了好久了。
我想問一下版主,我在source files中添加了C:\MCC18\src\traditional\startup中的c018i.c文件編譯后出現了以下錯誤Error - section '_entry_scn' type is non-overlay and absolute but occurs in more than one input file.
我怎麽在source files中添加c018i.c文件呢。
我的LKR檔裡只有18f85j10i.lkr,因爲我用的是ICD2調試,沒有您說得FILE c018i.o 的檔案,所以我不知道怎麽删除,您說得“前面加入 // File. c018i.0 的方式處理”,我也不是很明白。
請版主能够指點一下,非常感謝!

發表於: 2007/12/8 10:36
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#2
版主
版主


查看用戶資訊
注意一下,你所修改的是 c018i.c 的檔案,你必須將修改過的 c018i.c 加到 project 裡的 source code 把它當作程式來看。更重要的是你必須將 LKR 檔裡的 FILE c018i.o 的檔案從 LKR 檔裡暫時刪除。可以在前面加入 // File. c018i.0 的方式處理。

發表於: 2007/12/8 9:08
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#1
新會員
新會員


查看用戶資訊
之前用PICC寫bootloader函數時,可以通過設定Specify offset for ROM確定函數的起始地址,但用MCCP18后我不知道怎麽設定起始地址,我只知道可以在c018i.c中改變_entry_scn的起始地址來改變復位地址,但是改變以後從hex文件看,0x100地址之前還是編譯了程序,我迫切想知道怎麽能做到程序從0x0100地址開始,這個問題我已經研究了好久了也沒有結果。謝謝大家!
#pragma code _entry_scn=0x000100
void
_entry (void)
{
_asm goto _startup _endasm

}
#pragma code _startup_scn

發表於: 2007/12/7 14:25
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------