«前の日記(2020年12月23日) 最新 次の日記(2021年01月15日)» 編集

一往確認日記


2021年01月05日 [長年日記]

_ あけましておめでとうございます。

大雪で明けた2021、毎日の雪寄せに明け暮れています。
年末から開始したPLCでmrubyの企画ですが、今年中になんとか実用的なところまで持っていきたい気持ちになっているので、今年の抱負として「完遂」を掲げました。
本年もよろしくお願いいたします。

_ PLCでmruby (6) rite_binary_header

mrubyをPLCで動かせないかな〜という企画です。

mrbファイルの先頭にはRITEヘッダーデータがあるということで、該当する箇所を探してみます。

dmup.hファイルにrite_binary_headerという構造体がありました。

/* binary header */
struct rite_binary_header {
  uint8_t binary_ident[4];    /* Binary Identifier */
  uint8_t major_version[2];   /* Binary Format Major Version */
  uint8_t minor_version[2];   /* Binary Format Minor Version */
  uint8_t binary_crc[2];      /* Binary CRC */
  uint8_t binary_size[4];     /* Binary Size */
  uint8_t compiler_name[4];   /* Compiler name */
  uint8_t compiler_version[4];
};

これを元に調べてみましょう。

CRCとSizeはバイナリーデータでBig Endianになっている様です。

Rubyで調べるコードをこの様に書いて

codes = File.read "a.mrb"
binary_ident = codes[0, 4]
major_version = codes[4, 2]
minor_version = codes[6, 2]
crc = codes[8, 2].unpack("n")
size = codes[10, 4].unpack("N").first
compiler_name = codes[14, 4]
compiler_version = codes[18, 4]

pp binary_ident: binary_ident, major_version: major_version, minor_version: minor_version, crc: crc, size: size, compiler_name: compiler_name, compiler_version: compiler_version

出力されたのがこちらです。

% ruby read_rite_head.rb
{:binary_ident=>"RITE",
 :major_version=>"01",
 :minor_version=>"01",
 :crc=>27764,
 :size=>85,
 :compiler_name=>"MATZ",
 :compiler_version=>"0000"}

RITEというIDがあってバージョンは1.1、サイズは85バイト、コンパイラはMATZ、コンパライバージョンは0ということがわかりました。

サイズの85はファイルのサイズと一致していてヘッダーの先頭からフッター(多分あるでしょう)まで含んだサイズになっていることがわかります。

つづく


Amazon | Apple Lightning - USB 3カメラアダプタ | Apple(アップル) | USBアダプタ 通販