Перейти к основному содержимому

Примеры скриптов

Встроены в MultiProg в scripts/examples/:

СкриптЧто делает
hello.luaПоказывает конфигурацию и регионы памяти
bsh_pmm.luaЧтение строки модели из буфера МК, экспорт S19 с именем модели
read_and_verify.luaЧтение прошивки и верификация
batch_flash.luaПолный цикл прошивки с таймером
firmware_analysis.luaАнализ прошивки: ARM vectors, строки, CRC, использование flash
hex_patch.luaFind / replace, заливка, контрольные суммы
mass_production.luaСерийное программирование с серийниками и CSV-логом
target_search.luaПоиск таргетов в базе по ключевому слову
search_and_compare.luaMulti-pattern поиск + сравнение таргетов
create_target.luaСоздание кастомного таргета со схемой подключения
create_tgsn_target.luaСоздание TGSN-таргета
renesas_nec_checksum.luaКалькулятор SUM-RL78 (см. Чексум-скрипты)
stm32_g0_g4_export_mot.luaЭкспорт буфера STM32 G0 / G4 в .mot для J-Link
stm32f7_option_bytes_stvp_convert.luaКонвертация Option Bytes STM32F7 ↔ STVP S19
extended_ops_smoke.luaSmoke-тест расширенных write / erase операций
debug_test.luaДемо отладчика: breakpoints, инспекция переменных

Learning Lua

Lua — компактный, быстрый, легко изучаемый скриптовый язык. Если хочется выучить или потестировать Lua вне MultiProg:

Онлайн (без установки)

Локальная установка (Windows)

  1. Скачайте https://github.com/rjpcomputing/luaforwindows (Lua for Windows — включает редактор).
  2. Или через Scoop: scoop install lua.
  3. Запустите lua54.exe в терминале для интерактивного режима.

Ключевые отличия от других языков

  • Массивы начинаются с индекса 1 (не с 0).
  • ~= для «не равно» (не !=).
  • .. для конкатенации строк (не +).
  • local для локальных переменных (без него — глобальные).
  • nil вместо null.
  • Таблицы — единственная структура данных (и массивы, и словари, и объекты).
  • #table даёт длину массивоподобной таблицы.
  • Точки с запятой не нужны.

Краткий справочник

-- Переменные
local x = 42
local name = "MultiProg"
local ok = true

-- Строки
local s = "Hello " .. "World" -- конкатенация
local len = #s -- длина
local sub = string.sub(s, 1, 5) -- "Hello"

-- Таблицы (массивы)
local arr = {10, 20, 30}
for i, v in ipairs(arr) do print(i, v) end

-- Таблицы (словари)
local cfg = {target = "STM32", power = "3v3"}
print(cfg.target)

-- Функции
local function add(a, b) return a + b end

-- If / else
if x > 10 then
print("big")
elseif x > 0 then
print("small")
else
print("zero or negative")
end

-- For
for i = 1, 10 do print(i) end

-- While
while x > 0 do x = x - 1 end

-- Множественный возврат
local ok, err = mp.backend.connect()

-- Форматирование строк
local s = string.format("Value: 0x%04X (%d bytes)", 0xFF, 16)