Re: HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
新會員
|
問題已解決,是COMPILER的問題。
後來把PICC 9.6改為PICC 8.05後,編出來的碼就正確了。 沒親眼見到,還真是難以相信呀。 特地上來分享一下這個經驗。 也特別感謝taiwanuser大大的幫忙嚕。
發表於: 2007/10/3 12:03
|
|||
|
Re: HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
高級會員
|
" i " 宣告一下看看行不行..看起來是沒啥問題說..
小弟不才..請其他高手看看嘍
發表於: 2007/10/1 11:58
|
|||
|
Re: HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
高級會員
|
array[] 宣告的型態?
發表於: 2007/10/1 10:55
|
|||
|
HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
新會員
|
Dear All :
目前在使用PICC做陣列操作時,發現一個有疑問的現象如下: compiler:HI-TECH PICC 9.60 Lite Device:PIC16F505 先宣告一個Array[6]。 當後面我如此做時 for(i=0;i<=5;i++){ Array[i]=i; } 結果Array[0]~Array[5]=0。(錯誤) 於是我把Array[i]=i;改為一個定值Array[i]=0xab; 結果Array[0]~Array[5]=0xab。(正確) 分析Disassembly Listing的結果發現。 只要我把Array[i]=i 等號後面為變數時(不管是i,j,k)則編出來的碼會多了一行CLRF FSR的動作,導致i要丟入INDF時,FSR所指位置已經被清除了。 --------------------------------------------------------------------- 有疑問的部份: C code: for(i=0;i<=5;i++){ Array[i]=i; } Disassembly: 79: for(i=0;i<=5;i++){ 1EF 064 CLRF 0x4 1F0 071 CLRF 0x11 1F1 C06 MOVLW 0x6 1F2 091 SUBWF 0x11, W 1F3 603 BTFSC 0x3, 0 1F4 BFF GOTO 0x1ff 1FD 2B1 INCF 0x11, F 1FE BF1 GOTO 0x1f1 80: Array[i]=i; 1F5 211 MOVF 0x11, W 1F6 038 MOVWF 0x18 1F7 C12 MOVLW 0x12 1F8 1D1 ADDWF 0x11, W 1F9 024 MOVWF 0x4 1FA 064 CLRF 0x4 <--- 就是這一行。 1FB 218 MOVF 0x18, W <--- FSR已被清除,故此兩行所寫入位置為錯的。 1FC 020 MOVWF 0 81: } --------------------------------------------------------------------- 改為常數則無此問題: for(i=0;i<=5;i++){ Array[i]=0xab; } 79: for(i=0;i<=5;i++){ 1F1 064 CLRF 0x4 1F2 071 CLRF 0x11 1F3 C06 MOVLW 0x6 1F4 091 SUBWF 0x11, W 1F5 603 BTFSC 0x3, 0 1F6 BFF GOTO 0x1ff 1FC 064 CLRF 0x4 1FD 2B1 INCF 0x11, F 1FE BF3 GOTO 0x1f3 80: Array[i]=0xab; 1F7 C12 MOVLW 0x12 1F8 1D1 ADDWF 0x11, W 1F9 024 MOVWF 0x4 <--- 設定好FSR後 1FA CAB MOVLW 0xab <---緊接著0xab寫入INDF 1FB 020 MOVWF 0 81: } --------------------------------------------------------------------- 我在想Array[i]=i; 似乎只是基本的C語法。 這算是compiler的問題嗎? 或著有其他語法可以達成類似的動作? 想請教各位是否有遇過這種現象呢? 感謝各位撥時間看完落落長這篇。 Thanks.
發表於: 2007/10/1 10:48
|
|||
|