SinelaboreRT Header Logo

SinelaboreRT

Productivity for embedded software development

User Tools

Site Tools


wiki:news:14feb2020

How to generate Lua Code from State Diagrams

Lua is a powerful, efficient, lightweight, embeddable scripting language (http://www.lua.org/). To generate Lua code call the code generator with the command line flag -l lua .

The generator generates one Lua module which implements the complete state machine. Take this simple state machine as example.

 Image of an example statemachine to generate LUA code

For a simple state machine with 4 states and 2 events the generated module looks like this:

function testcase:new()
        local new_inst = {}
        setmetatable( new_inst, testcase)
 
        -- machine states
        new_inst.states = {
                S1="S1",
                S11="S11",
                S12="S12",
                S3="S3",
                __UNKNOWN_STATE__="__UNKNOWN_STATE__"
        }
 
        -- machine events
        new_inst.events = {
                evB="evB",
                evA="evA",
                TESTCASE_NO_MSG="TESTCASE_NO_MSG"
        }
 
        -- Set state vars to default states
        new_inst.stateVar = new_inst.states.S1
        new_inst.stateVarS1 = new_inst.states.S11 -- set init state of S1 
 
        new_inst.init=false
        return new_inst
end
 
function testcase:processEvent(Event)
...
return evConsumed;
end
 
return testcase

The statemachine can be used as follows:

testcase = require "testcase"
 
local testcase1 = testcase:new()
Event = {event = testcase1.events.TESTCASE_NO_MSG, condition=false};
testcase1:processEvent(Event)
 
Event.event=testcase1.events.evA;
testcase1:processEvent(Event)

The following state machine features are supported:

  • States and sub-states
  • Deep โ€“ and flat hierarchy
  • Entry, Exit and Action code of states
  • Regions are supported and implemented as sub-functions called from the main state machine handler
  • Choice pseudo-states

The complete example is available in the examples/microwave_handbook_lua folder.

Any feedback is highly welcome!

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
wiki/news/14feb2020.txt ยท Last modified: 2024/05/03 20:42 by webmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki