會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





為ISR預留空間並設寫入保護
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 204
等級: 13; EXP: 32
HP : 0 / 308
MP : 68 / 3592
離線
原本編譯器會按照自己的方式編排每一個routine的開始位址,然而我亦可以透過加「org XXX」自定它們的開始位址

現在我想做的是:

0x0004 ISR
0x0138 ISR完結
0x0139 預留
0x0200 其他routine


16F1939可以將0000至01FF設成寫入保護而不影響其他的,而我想設保護的範圍就是只有ISR

如果沒自定位址,那麼編譯器會將所有routine擠在一起(但ISR一定放在最前面)。如上面的做法,有方法預留0139至01FF的空間嗎?

註:我不是用ASM寫

9月13日 15:13:20
轉換PDF檔 列印


Re: 為ISR預留空間並設寫入保護
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14125
等級: 72; EXP: 47
HP : 1072 / 1786
MP : 4708 / 70329
離線
1. 程式開始先寫 ISR 並指定 org 0x0004

org 0x00
goto Start
org 0x04
isr routine
:
:
org 0x200
Start 主程式

這樣 ISR 就會在 0x04 以後的空間。
因為後面的程式被指定在 0x200 以後的位址,所以組譯後也都會在 0x200 以後的位址。

2. 修改 pic16F1937-g.lkr 檔

將 lkr 當做適當的修改。將 0x0000 ~ 0x01ff 做保護,這樣組譯時就會避開這段區間。但用 org 指定的位址則不受影響。

LIBPATH .

CODEPAGE NAME=Userpage START=0x00 END=0x1FF PROTCETED
CODEPAGE NAME=page0 START=x200 END=0x7FF
CODEPAGE NAME=page1 START=0x800 END=0xFFF
CODEPAGE NAME=page2 START=0x1000 END=0x17FF

9月14日 14:07:45
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project