Re: BANK1變數定義問題
|
||||
---|---|---|---|---|
資深會員
|
先謝謝你的回答
我本來也是用 res 跟 cblock 的方式相對定址 但發現有個缺點... 當我用ICD2除錯 要看某個變數的值時 我不知道他擺在哪裡... 必須一個一個算才知道他實際位址 先算出位址才能用WATCH視窗觀看其值變化 兩百多個變數慢慢算位址實在是很麻煩 而如果把要看的變數擺在前面的位址 就必須重新編譯程式再燒錄一次 在單一檔案的程式可以直接打變數名稱 WATCH就會找到位址並顯示其值 我不知道是不是因為我用多檔連結方式寫程式 我在WATCH中打變數名稱他都找不到 所以只能用實際位址的方式看值 而如果如你範例所寫用註解寫實際位址 那我不如乾脆直接定址就好了... 所以我現在就又改回直接定址了 位址在哪一清二楚 這樣也清楚變數是否已經超過BANK0 代理商的FAE跟我說我這樣定址在BANK1是對的 等程式改完後再實際實驗看看能不能用吧~
發表於: 2005/10/12 11:16
|
|||
|
Re: BANK1變數定義問題
|
||||
---|---|---|---|---|
初級會員
|
Dear Jubel,
您的問題晾了很幾天了,我試著回答一下吧! 1. PIC系列的Memory Banking是user要自理且要很注意的。 2. 在MPLAB IDE下,“Help” -> “Topics” -> “MPASM assembler” -> “索引” -> “Bank Selecting”可以找到以下範例: group1 udata 0x20 ;group1 data stored at locations ;starting at 0x20 (bank 0). group1_var1 res 1 ;group1_var1 located at 0x20. group1_var2 res 1 ;group1_var2 located at 0x21. group2 udata 0xA0 ;group2 data stored at locations ;starting at 0xA0 (bank 1) group2_var1 res 1 group2_var2 res 1 RST CODE 0x0 ;The code section named RST ;is placed at program memory ;location 0x0. The next two ;instructions are placed in ;code section RST. pagesel start ;Jumps to the location labelled goto start ;'start'. PGM CODE ;This is the begining of the ;code section named PGM. It is ;a relocatable code section ;since no absolute address is ;given along with directive CODE. start banksel group1_var1 ;This directive generates code ;to set/clear bank select bits ;RP0 & RP1 of STATUS register ;depending upon the address of ;group1_var1. clrf group1_var1 clrf group1_var2 banksel group2_var1 ;This directive generates code ;to set/clear bank select bits ;RP0 & RP1 of STATUS register ;depending upon the address of ;group2_var1. clrf group2_var1 clrf group2_var2 goto $ ;Go to current line (loop here) end 3. udata-res提供relocatable 定址方式。這與您的絕對定址不同。 4. 您似乎比較喜歡絕對定址?除非有絕對必要,建議您培養使用relocatable 定址的習慣,程式的可攜性較佳。
發表於: 2005/10/11 23:04
|
|||
|
BANK1變數定義問題
|
||||
---|---|---|---|---|
資深會員
|
使用PIC18F8621
第一次變數多到BANK0放不下... 以前變數少的時候 我都是使用
IIC_DATA_0 EQU 20H ;數值資料0
這種方式編排變數位址 有時是使用cblock跟endc 方式擺放 剛剛算了一算目前變數已經超過256 而且持續增加中... 目前是打算把一些四則運算用的變數放到bank1 要運算時切換過去,運算完再切回bank0 數值傳遞用16位元定址不必切bank的MOVFF指令 我想請問的是 我要把變數編在BANK1的話 那我是要寫成這樣嗎?
IIC_DATA_0 EQU 0120H ;數值資料0
把變數位址寫成16位元就可以了嗎? 還是說有其他設定方式? 另外若我用的是CBLOCK方式編排 如果超過256個的話他會不會自動編到下一個BANK去? 只玩過PIC18系列 所以第一次遇到BANK切換 希望各位前輩指點 謝謝^^
發表於: 2005/10/8 14:52
|
|||
|