PIC用コンパイラCC5Xのバグ [PIC]
最近趣味の時間が取れるようになったので赤外線コントローラをいじっています。
生成コードサイズがFreeバージョンの上限の1KBを超えたのでソースを分割し、リロケータブルにしてからリンクするようにしました。
以前、電源電圧電流モニタを作成した時にもやったことなのですんなり行くかと思ったが動かない・・・・^^;
原因はコンパイラのバグでした。orz
Wレジスタに配列ポインタを代入すると誤った値で直値代入のコードが生成されてしまう(コンパイル時点ではアドレス解決できていないはずなのに・・・)
最新バージョン(Ver3.3H)にしても同様で、分割コンパイルして使う人は少ないからまだバグが枯れていないのかなぁ〜
生成コードサイズがFreeバージョンの上限の1KBを超えたのでソースを分割し、リロケータブルにしてからリンクするようにしました。
以前、電源電圧電流モニタを作成した時にもやったことなのですんなり行くかと思ったが動かない・・・・^^;
原因はコンパイラのバグでした。orz
Wレジスタに配列ポインタを代入すると誤った値で直値代入のコードが生成されてしまう(コンパイル時点ではアドレス解決できていないはずなのに・・・)
最新バージョン(Ver3.3H)にしても同様で、分割コンパイルして使う人は少ないからまだバグが枯れていないのかなぁ〜
---- sample of problem ---- 743: ; W = &SndData[0]; // <- complier(3.3H,) bug. generated imidiate value setting 168 3043 MOVLW 0x43 744: MOVLW .67 ← 誤った値が代入される!! 745: ; FSR = W; 169 0084 MOVWF 0x4 746: MOVWF FSR 747: ; FSR = &SndData[0]; 16A 302C MOVLW 0x2c 748: MOVLW LOW(SndData+0) ← 正しい値が代入される 16B 0084 MOVWF 0x4 749: MOVWF FSR
2009-02-21 11:21
nice!(0)
コメント(0)
トラックバック(0)
コメント 0