久々にSerial Debugger/Socket Debuggerを使いました。
ちょっとしたプロトコルを実装したかったのでLua scriptを書きました。
SerialDebugger-v1_18B
SocketDebuggerFree-v1_17
ではLua 5.1が使えるようです。
覚書。
##配列ではなくテーブル
Luaには配列がありません。テーブルを使います。
テーブルというくらいなんで名前でアクセスしたりいろいろ出来るようです。
Serial Debugger/Socket Debuggerで使うコレクションは単純な配列のほうが扱いやすいのですが。
高機能と思いきやテーブルの結合が出来ません。
単純にはforでぶん回して追加していくみたいです。
--空のテーブルを割り当て
table = {}
--要素の割り当て
table[1] = 1
--末尾に要素を追加
--#tableは table.lengthみたいなものらしい
table[#table + 1] = 2
--初期値で宣言したりもできる
table2 = { 1, 2, 3}
--table と table2の結合を単純にやるとこんな感じ
for key = 1, #table2 do
table[#table + 1] = table2[key]
end
正にやりたかった 「..」 でのテーブル結合はここで紹介されています。
http://hevohevo.hatenablog.com/entry/2014/02/03/214843
##チェックサム計算
--byte配列を走査してチェックサムを付加して返す
function SetChecksum(a)
chk_sum = 0
--テーブルの開始インデックスは1です
--#(テーブル変数)で要素数を取得できます
for key = 1,#a do
--チェックサム計算
chk_sum = chk_sum + hoge(a[key])
key = key + 1
end
--要素の追加は追加したいインデックスに値を詰めるだけ
--テーブル末尾への追加は↓でOK
a[#a+1] = GetChecksum(chk_sum)
return a
end
##現在の日付文字列の取得 (秒まで)
日付を取得する王道はos.dateの様です。
datetable = os.date("*t")
datestr = string.format("%04d",datetable["year"])
.. string.format("%02d",datetable["month"])
.. string.format("%02d",datetable["day"])
.. string.format("%02d",datetable["hour"])
.. string.format("%02d",datetable["min"])
.. string.format("%02d",datetable["sec"])
##ミリ秒を測る
os.date()では秒単位までしか取れません。
Serial Debugger/Socket Debuggerで時間を測るようなときはミリ秒単位で取れないと意味無いケースが多いと思います。
時間を計るだけなら以下でミリ秒まで計れます。単位は秒なので0.001刻みです。
starttime = os.clock()
--何か処理
elapsedtime = os.clock() - starttime
##ASCII文字列とbyte配列の相互変換
function ConvertStringToByteArray(data)
t = {}
for i=1, string.len(data) do
t[i] = data:byte(i)
end
return t
end
function ConvertByteArrayToString(data)
rtnStr = ""
for key = 1, #data do
rtnStr = rtnStr .. string.char(data[key])
end
return rtnStr
end