--:-- LUA API

上限

メモリ・実行時間・数の範囲・各種サイズの上限

メモリ・実行時間

項目値説明
Luaが使えるメモリ200KB(204,800バイト)1アプリあたり。コード・テーブル・文字列など全部を含む。ウィジェットと画像は別枠
命令数(1回の呼び出しあたり)200万命令超えるとその呼び出しはエラーで打ち切られる。実行時間とメモリの上限
main.lua の大きさ16KiB超えた分は切り捨てて読む(たいてい構文エラーになる)
require で読む1ファイル32KiB先に読み込めるのは1つのスクリプトにつき16モジュールまで
同時に存在できるウィジェット1,023個
バックグラウンドのスクリプトメモリ48KB・1回30秒バックグラウンド

数の範囲(32bitのLua)

pico-os の Lua は 32bitの整数と32bitの小数(単精度) で動きます。

  • 整数は math.mininteger(-2147483648)〜math.maxinteger(2147483647)。超えると黙って回ります(2147483647 + 1 == -2147483648)。0xffffffff は -1 です
  • 小数の有効桁は約7桁。16777217.0 == 16777216.0 になります。エポック秒(約17億)や大きなミリ秒を小数で割ると端数が落ちるので、時刻の差は整数のまま引いてから割ってください
  • tostring は小数を7桁で書きます(0.1 → "0.1")。JSONの書き出しも同じ
  • pico.time() / os.time() のエポック秒は2038年1月まで整数に収まります

サイズの上限

項目値
pico.sd_read() / sd_read_part() で1回に読める大きさ16KiB(超えるファイルは sd_read が nil。切り詰めない)
pico.http_request() で送る本文16KiB
pico.http_request() で受け取る本文16KiB(メモリで受けるとき。save_to でSDへ保存するなら8MiB)
pico.http_request() の順番待ち走っている1本 + 待ち4本
pico.http_request() の追加ヘッダ合計1000バイト、1行(名前: 値)は512バイト未満
pico.after / pico.every のタイマー16個
push_scene の args / pop の resultJSONで1KiB未満
on_suspend が返す状態JSONで2KiB未満
pico.store_save()JSONで16KiB(暗号化するときは12KiB)
pico.json_decode の入力 / json_encode の出力64KiB。入れ子は16段
pico.json_pick / xml_pick の文字列の値255バイト(sd_json_pick / sd_xml_pick のファイルは1MiB)
同時に持てる画像(image_load / image_create)8枚・合計96KiB
TabBar のタブ8個
pico.tab_link の連動32個
pico.set_name の名前128個・各23文字まで
pico.set(id, "text", ...) に渡せる文字列255バイト(長い文章は pico.text_set)
TextView の文章(pico.text_set)16KiB(1024行まで表示)
MarkdownView の文書8KiB
pico.show_choice の選択肢64個
pico.show_message の本文512バイト
pico.draw_text_wrapped2048バイト・64行
pico.draw_polygon / fill_polygon32点
pico.notify の予約1アプリ4件(OS全体で16件)
pico.encrypt の平文12KiB
pico.random_bytes1〜1024バイト
pico.base64_encode / decode の入力12KiB / 16KiB
pico.clipboard_set1KiB

HTTPS

  • https:// で信頼するのは、本体に入っているルート証明書(Google / Let’s Encrypt / DigiCert / Sectigo)と、SDの /sys/tls/ca.pem です。
  • 本体の時計が合う(Wi-Fiにつながって時刻を合わせる)前は繋がりません。