独自言語の検討(その4) [PIC]
バイトアクセス機能を実装しました。PIC24への実装が前提ですが奇数番地からのワードアクセスではアクセス違反の割込みが発生してしまうのでワード変数とバイト変数は明確に区別が付くようにする必要があります。
しかし今回の独自言語では言語仕様をなるべくコンパクトにしたいので複数の型宣言には対応しないつもりです。
そこで ハンガリアン記法 のように変数名の接頭文字に意味をもたせ、接頭文字でバイトアクセスかの判定をするようにしました。
具体的には
この程度ならソース変更は直ぐに完了です。テストソースは次のとおり。
バイト配列テストソース(独自言語)
通常の配列とバイト配列を重ねることで C言語の union のように int データのバイト分割も可能です。
また、今回のテスト用に組込み関数 PrnHex_() を追加しました。'$'はHEX数値の接頭文字です。
テストソース実行結果
[ 前へ ] 連載記事 [ 次へ ]
しかし今回の独自言語では言語仕様をなるべくコンパクトにしたいので複数の型宣言には対応しないつもりです。
そこで ハンガリアン記法 のように変数名の接頭文字に意味をもたせ、接頭文字でバイトアクセスかの判定をするようにしました。
具体的には
- バイトアクセスは配列表記によって行う。
- 変数名の接頭文字が '_' の場合、配列要素がバイト単位でのアクセスとなる(バイトアクセスのみを判別できればいいので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> |
[ 前へ ] 連載記事 [ 次へ ]
コメント 0