SSブログ
English Version

xc16 コンパイラはビット処理が苦手なの?(その2) [PIC]

 PIC24系はSDCCも対応していないし、Free版コンパイラの選択肢が少ないですね^^;
 PIC16系はコンパイル結果を検討した上でBKD社の CC5X を使っています(お勧めします)

 PIC24系でのコンパイル環境を少し調べました。マイクロチップ社製以外で無料で使えるものとして Firewing というBASICコンパイラがありました。

 対応チップは PIC18、PIC24、PIC32 と幅広いです ^^

 実装としては BASIC のソースを C言語に変換する トランスレータであり、Cコンパイラを使ってマシン語に変換するようです。

 PIC24FJ64GA でもLチカ程度なら容易に動きました。試したVersionはFirewing:1.0.0.7B7、xc16:v1.23 です。PICへの書き込みは当然 OneBitLoader を使っています ^^

 結局マイクロチップ社製の xc16コンパイラを使うので、BIT演算部分は前回とほぼ同様な結果でした。

  1. BASICソース(抜粋) sub Main() Dim LED As latb.7 trisb.7 = 0 While True LED = LED xor 1 DelayMS(100) End While End Sub
  2. C言語へのトランスレート後 __attribute__((near)) void PROC_Main_2(void) { _TRISB.b7 = 0; WHILE_0:; W0_U16_00079.val = _LATB.b7; _LATB.b7 = W0_U16_00079.val ^ 1; asm volatile("mov #0x69F2, w0" ::: "w0"); asm volatile("mov #0x0018, w1" ::: "w1"); __Delay32(); goto WHILE_0; };
  3. アセンブラへのコンパイル結果 85 _PROC_Main_2: 86 .set ___PA___,0 87 000024 88 1F 78 mov w8,[w15++] 88 000026 C8 E2 A9 bclr.b __TRISB,#7 89 000028 F8 F7 2F mov #-129,w8 90 .L4: 91 00002a 64 16 80 mov __LATB,w4 92 00002c 47 22 DE lsr w4,#7,w4 93 00002e 61 02 62 and w4,#1,w4 94 000030 A4 40 88 mov w4,_W0_U16_00079 95 000032 04 00 A2 btg w4,#0 96 000034 47 22 DD sl w4,#7,w4 97 000036 66 16 80 mov __LATB,w6 98 000038 86 02 64 and w8,w6,w5 99 00003a 05 02 72 ior w4,w5,w4 100 00003c 64 16 88 mov w4,__LATB 101 ; 276 "test.c" 1 102 00003e 20 9F 26 mov #0x69F2, w0 103 ; 277 "test.c" 1 104 000040 81 01 20 mov #0x0018, w1 105 000042 00 00 07 call ___Delay32 106 000044 00 00 37 bra .L4


[ 前へ ] 連載記事 [ 次へ ]
nice!(1)  コメント(1)  トラックバック(1) 
共通テーマ:趣味・カルチャー

nice! 1

コメント 1

skyriver

 PIC24FJ64GAに限って言えばフリーのコンパイラ環境として自分用に開発したpicle(セルフコンパイラ)があります(少し宣伝・・)

http://piclabo.blog.so-net.ne.jp/2016-04-02

by skyriver (2017-08-01 00:57) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1