4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Lua】覚書 Serial Debugger/Socket Debugger向けLua script

Last updated at Posted at 2018-07-18

久々に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
4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?