SSブログ
English Version

独自言語 picle のコンパイラ化(その13)asm_()対応 [PIC]

 picleコンパイラをアップデートしました。
 今回は修正2件と機能追加1件です。

  1. 修正内容
     修正は次の2件です。

    • 単項演算子'+'の処理修正
       絶対値を求める単項演算子が正数の変数に対して負の値を返していました。^^;;
       原因はMSBをチェックしスキップ命令を生成している箇所で使ったBTSC命令のマクロ定義で bit4 が最大(0x0f)の場合、符号拡張され上位ビットがすべて1になっていました・・

       #define BTSC_Ws_bit4(Ws,bit4) COND {DISP2("BTSC W%d,#%d",Ws,bit4); COND2 ¥  
               FWRITE(0xa70000|(bit4<<12)|ADRS_SMODE_DIR|Ws); COND3
      

       bit4が 8 より小さい場合は正常に動くので厄介です・・
       対処としては bit4 の前に long のキャストを付けました。

    • "else if ("構文
       "else if ("の次の文字がスペース以外の場合、エラーになるので、スペースを入れなくてもエラーにならないように修正しました。


  2. 機能追加
     外部関数宣言機能を追加済みですが、レジスタロック解除のような数命令を追加する場合でも、アセンブラで記述後HEXファイルを作成するのは面倒なのでマシン語をpicleソースに埋め込むための asm_() という組込み処理を追加しました。

     引数はニーモニックではなく、マシン語の直値なので code_() のような処理名にすべきかもしれませんが覚えやすいように asm_() にしましたw
     また、この処理のみ、特例として引数が long(4バイト)になっています。

     使い方としては asm_( $fe4001 ); のようになります(この例はCPUのモードをアイドルモードに移行するマシン語の埋め込み例)
     マシン語を埋め込むとソースの可読性が落ちるため、大量のマシン語を埋め込むことは想定していないので1回の asm_ でマシン語を1ワードのみ埋め込めるようにしています。


 上記の対応を行った picle コンパイラは「独自言語 picle compiler on PIC24FJ」の記事からダウンロードできます。


★2017/11/26 追記
 上のasm_()の説明で「直値」という単語を使っていますが、「即値」との違いは??
IT用語辞典で確認してみると即値=イミディエイト、直値=リテラルということのようです。
  • 即値
     即値とは、アセンブリ言語や機械語で、命令が扱う対象となるデータ(オペランド)としてコード中に直に書き込まれた数値のこと。メモリやレジスタなどから読み出した値ではなく、コード中で命令語の直後に置かれている値であることからこのように呼ばれる。
  • 直値
     リテラルとは、コンピュータプログラムのソースコードなどで、特定のデータ型による値を直接表記する際の書式。また、そのような書式に従って記載された値。

 高水準言語でソースコード中に直に書き込まれたデータのことや、そのようなデータの記述形式を即値ということがあるが、こちらは「リテラル」(literal)と呼ぶのが一般的である。

ということなので「直値」で間違っていないようです(picleが高水準言語か否かは別としてw)。


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

赤外線コントローラのケース設計(その2) [3D_printer]

 「赤外線コントローラのケース設計」の記事で書いた「CNCルータでの両面基板制作(その2) Via処理と基板制作」で作成したPIC16F88のSSOPパッケージを使った表面実装両面基板のケースの続編です。

 3Dプリンタでケースを出力してパーツを実装してみました。まだ赤外線LEDが未実装ですが、一応ケース内にパーツが収まりました(下の写真)。
 両面基板の固定は写真では判らないですが基板を溝に入れ、反対側の辺をABS樹脂の弾力を利用してネジを使わないで固定しています(今後もこの方法は使えそう)。
 ネジを1本も使わないのが理想ですが私の3Dプリンタでの出力では強度やはめ込み精度の関係で難易度が高いです。

 強度という点では出力した造形物をホットガンで表面を熱してやると艶々になり強度が増すことが判りました。但し、一度にやると形が歪んでしまうので部分的に何度かに分けて熱する必要があります。今回はヤスリで削って白くなった部分だけに適用しています。
 アセトンの蒸気で表面をツルツルにするやり方の簡易版です。

 また、今後の課題として両面基板は小型にできましたがコネクタ部分が場所をとるので小型で安価なコネクタを検討する必要があります。

パーツ組込み



 まだ、裏ブタはしていないですが操作面が下の写真です。写真では判り辛いですがケースの角の部分等、結構ラフな仕上がりになっています。
 また、ジョイスティック(Amazonかebayで買ったもの)の穴が若干ずれている・・・^^;;;
 これはケース設計時に入力したジョイスティックのサイズがいい加減だったからですw

 ソフトはとりあえず「赤外線コントロールの実験」で作ったものを移植しただけなので今回用にカスタマイズする必要があります(ジョイスティックのスティックプッシュのスイッチ等の追加が必要)。

操作面


★2017/11/19 追記
 下の連載記事のリンクから回路図まで辿れない(両面基板の実験は最初はPIC関連として書いていたので連載記事のリンクが複雑になっている)のに気が付きました。回路図は「両面プリント基板の制作実験(その7)オブラート転写方式」の記事に記載しています。


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