• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

deemess/uLua: Lua compiler and iterpreter used to run onto different microcontro ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

deemess/uLua

开源软件地址(OpenSource Url):

https://github.com/deemess/uLua

开源编程语言(OpenSource Language):

C 76.2%

开源软件介绍(OpenSource Introduction):

uLua

Lua compiler and iterpreter to run on microcontroller (AVR 8 bit)

About

uLua aimed to run Lua scripts on microcontrollers with very limited resources, like RAM. uLua should work on microcontrollers with RAM >= 1k. Second thing which uLua should achieve is fast code interpreter. Goal is 1 Million Lua instructions on 10 MIPS (10 MHz for AVR). Usage

luac.exe -s -o alltest.luc alltest.lua
ChunkSpy.lua alltest.luc alltest.lua -o alltest.lst
uLuaPC.exe alltest.luc

ChunkSpy.lua - optional. This script used to generate listing file from compiled luc file. Features

Currenly support:

function calls global consts global and local variables math operations for loops native functions (like print()) closures with upvalues garbage collector

Following code could be executed by uLua.

--load nil test
function loadtest()
        local a,b,c,d,e = nil,nil,0
        local aa,bb = true,false
        print(a,b,c)
        print(aa,bb)
end
loadtest()

-- for loop test
for i = 1, 3, 1 do
        print(i)
end 

for i = 3, 1, -1 do
        print(i)
end 

-- upvalue test
function newCounter ()
        local i = 0
        return function ()   -- anonymous function
                        i = i + 1
                        return i
                end
end
c1 = newCounter()
print(c1())  --> 1
print(c1())  --> 2
print(c1())  --> 3


-- function call test
function func1(par1,par2)
        local local1 = par1 + par2
        return local1
end

function func2(par1,par2,par3)
        local local1 = par1 + par2
        local local2 = par3 * par3
        local1 = local1 + local2
        return local1
end

a=1
b=3
c=3.5

result1 = func1(a,b)
result2 = func2(a,b,c)
print("Result1 = ", result1)
print("Result2 = ", result2)

--math test
local a,b = 2,4; a = a + 4 * b - a / 2 ^ b % 3
print("a + 4 * b - a / 2 ^ b % 3 = ", a)

--conditional jumps test
if a ~= b 
        then print("a != b")
end
if a > b 
        then print("a > b")
end
if a >= b 
        then print("a >= b")
end
if a < b 
        then print("a < b")
end
if a <= b 
        then print("a <= b")
end
if a == b 
        then print("a == b")
end

Upcoming features:

GC - garbage collector. Currenly implemented GC heap standard functions, like:

    //initialize garbage collector and memory management
    void gcInit();
    //create new variable and return its number
    gcvarpt* gcNew(vartype type);
    //create new variable with given size and return its number
    gcvarpt* gcNew(vartype type, u08 size);
    //delete variable
    void gcDelete(gcvarpt* variable);

Tables - widly used in lua variable type. Will be implemented as hash table. GC should be implemented first.

Supported Operands

OP_CODE NAME Description
0 MOVE Copy a value between registers
1 LOADK Load a constant into a register
2 LOADBOOL Load a boolean into a register
3 LOADNIL Load nil values into a range of registers
4 GETUPVAL Read an upvalue into a register
5 GETGLOBAL Read a global variable into a register
7 SETGLOBAL Write a register value into a global variable
8 SETUPVAL Write a register value into an upvalue
12 ADD Addition operator
13 SUB Subtraction operator
14 MUL Multiplication operator
15 DIV Division operator
16 MOD Modulus (remainder) operator
17 POW Exponentiation operator
22 JMP Unconditional jump
23 EQ Equality test
24 LT Less than test
25 LE Less than or equal to test
28 CALL Call a closure
36 CLOSURE Create a closure of a function prototype
30 RETURN Return from function call
31 FORLOOP Iterate a numeric for loop
32 FORPREP Initialization for a numeric for loop

Not yet supported

OP_CODE NAME Description
6 GETTABLE Read a table element into a register
9 SETTABLE Write a register value into a table element
10 NEWTABLE Create a new table
11 SELF Prepare an object method for calling
18 UNM Unary minus operator
19 NOT Logical NOT operator
20 LEN Length operator
21 CONCAT Concatenate a range of registers
26 TEST Boolean test, with conditional jump
27 TESTSET Boolean test, with conditional jump and assignment
29 TAILCALL Perform a tail call
33 TFORLOOP Iterate a generic for loop
34 SETLIST Set a range of array elements for a table
35 CLOSE Close a range of locals being used as upvalues
37 VARARG Assign vararg function arguments to registers

Known Issues

GC could leak, implemented simple reference counting logic. Reference cycling is not supported.




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap