SSブログ
English Version

独自言語の検討(その4) [PIC]

 バイトアクセス機能を実装しました。PIC24への実装が前提ですが奇数番地からのワードアクセスではアクセス違反の割込みが発生してしまうのでワード変数とバイト変数は明確に区別が付くようにする必要があります。
 しかし今回の独自言語では言語仕様をなるべくコンパクトにしたいので複数の型宣言には対応しないつもりです。
 そこで ハンガリアン記法 のように変数名の接頭文字に意味をもたせ、接頭文字でバイトアクセスかの判定をするようにしました。

 具体的には
  • バイトアクセスは配列表記によって行う。
  • 変数名の接頭文字が '_' の場合、配列要素がバイト単位でのアクセスとなる(バイトアクセスのみを判別できればいいので1文字の接頭文字とした)

 この程度ならソース変更は直ぐに完了です。テストソースは次のとおり。

バイト配列テストソース(独自言語)
# Byte array test
#  by skyriver 2016/01/14

proc ByteTest() {
    var ar_word, _ar_byte;

    ar_word = Array_(0);
    _ar_byte = ar_word;
    ar_word[ 0 ] = $1234;

    PrnStr_( "ar_word[0] = 0x" );
    PrnHex_( ar_word[0] );

    _ar_byte[ 1 ] = $56;
    PrnStr_( "\nchange high byte to 0x56 : 0x" );
    PrnHex_( ar_word[0] );

    _ar_byte[ 0 ] = _ar_byte[ 1 ];
    PrnStr_( "\ncopy high byte to low byte : 0x" );
    PrnHex_( ar_word[0] );
}

proc main() {
    ByteTest();
}


 通常の配列とバイト配列を重ねることで C言語の union のように int データのバイト分割も可能です。
 また、今回のテスト用に組込み関数 PrnHex_() を追加しました。'$'はHEX数値の接頭文字です。

テストソース実行結果
C:\src\vc\2010Express\tscl\tscl\Debug>tscl test.pid
ar_word[0] = 0x1234
change high byte to 0x56 : 0x5634
copy high byte to low byte : 0x5656
C:\src\vc\2010Express\tscl\tscl\Debug>


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

nice! 1

コメント 0

コメントを書く

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

トラックバック 2