Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
6e840a45
Commit
6e840a45
authored
Feb 13, 2015
by
funshine
Browse files
add node.compile() api
parent
3b80bc44
Changes
7
Show whitespace changes
Inline
Side-by-side
README.md
View file @
6e840a45
...
...
@@ -28,6 +28,13 @@ Tencent QQ group: 309957875<br />
-
cross compiler
# Change log
2015-02-13
<br
/>
add node.compile() api to compile lua text file into lua bytecode file.
<br
/>
this will reduce memory usage noticeably when require modules into NodeMCU.
<br
/>
raise internal LUA_BUFFERSIZE from 1024 to 4096.
<br
/>
lua require("mod") will load "mod.lc" file first if exist.
<br
/>
build latest pre_build bin.
2015-02-12
<br
/>
fix float print.
<br
/>
update spiffs, add file.rename api to file module.
<br
/>
...
...
@@ -297,6 +304,7 @@ cu:send("hello")
####Use DS18B20 module extends your esp8266
```
lua
-- read temperature with DS18B20
node
.
compile
(
"ds18b20.lua"
)
-- run this only once to compile and save to "ds18b20.lc"
t
=
require
(
"ds18b20"
)
t
.
setup
(
9
)
addrs
=
t
.
addrs
()
...
...
app/include/user_config.h
View file @
6e840a45
...
...
@@ -7,7 +7,7 @@
#define NODE_VERSION_INTERNAL 0U
#define NODE_VERSION "NodeMCU 0.9.5"
#define BUILD_DATE "build 2015021
2
"
#define BUILD_DATE "build 2015021
3
"
// #define DEVKIT_VERSION_0_9 1 // define this only if you use NodeMCU devkit v0.9
...
...
app/lua/luaconf.h
View file @
6e840a45
...
...
@@ -108,7 +108,7 @@
#define LUA_CDIR LUA_ROOT "lib/lua/5.1/"
#ifndef LUA_RPC
#define LUA_PATH_DEFAULT "?.l
ua
;?.l
c
"
#define LUA_PATH_DEFAULT "?.l
c
;?.l
ua
"
#define LUA_CPATH_DEFAULT ""
#else // #ifndef LUA_RPC
#define LUA_PATH_DEFAULT \
...
...
@@ -542,7 +542,7 @@ extern int readline4lua(const char *prompt, char *buffer, int length);
/*
@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
*/
#define LUAL_BUFFERSIZE BUFSIZ
#define LUAL_BUFFERSIZE
(
BUFSIZ
*4)
/* }================================================================== */
...
...
app/modules/node.c
View file @
6e840a45
// Module for interfacing with system
//#include "lua.h"
#include "lualib.h"
#include "lua.h"
#include "lauxlib.h"
#include "ldo.h"
#include "lfunc.h"
#include "lmem.h"
#include "lobject.h"
#include "lopcodes.h"
#include "lstring.h"
#include "lundump.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
...
...
@@ -14,6 +22,7 @@
//#include "spi_flash.h"
#include "user_interface.h"
#include "flash_api.h"
#include "flash_fs.h"
// Lua: restart()
static
int
node_restart
(
lua_State
*
L
)
...
...
@@ -311,6 +320,73 @@ static int node_output( lua_State* L )
return
0
;
}
static
int
writer
(
lua_State
*
L
,
const
void
*
p
,
size_t
size
,
void
*
u
)
{
UNUSED
(
L
);
int
file_fd
=
*
(
(
int
*
)
u
);
if
((
FS_OPEN_OK
-
1
)
==
file_fd
)
return
1
;
NODE_DBG
(
"get fd:%d,size:%d
\n
"
,
file_fd
,
size
);
if
(
size
!=
0
&&
(
size
!=
fs_write
(
file_fd
,
(
const
char
*
)
p
,
size
))
)
return
1
;
NODE_DBG
(
"write fd:%d,size:%d
\n
"
,
file_fd
,
size
);
return
0
;
}
#define toproto(L,i) (clvalue(L->top+(i))->l.p)
// Lua: compile(filename) -- compile lua file into lua bytecode, and save to .lc
static
int
node_compile
(
lua_State
*
L
)
{
Proto
*
f
;
int
file_fd
=
FS_OPEN_OK
-
1
;
size_t
len
;
const
char
*
fname
=
luaL_checklstring
(
L
,
1
,
&
len
);
if
(
len
>
FS_NAME_MAX_LENGTH
)
return
luaL_error
(
L
,
"filename too long"
);
char
output
[
FS_NAME_MAX_LENGTH
];
c_strcpy
(
output
,
fname
);
// check here that filename end with ".lua".
if
(
len
<
4
||
(
c_strcmp
(
output
+
len
-
4
,
".lua"
)
!=
0
)
)
return
luaL_error
(
L
,
"not a .lua file"
);
output
[
c_strlen
(
output
)
-
2
]
=
'c'
;
output
[
c_strlen
(
output
)
-
1
]
=
'\0'
;
NODE_DBG
(
output
);
NODE_DBG
(
"
\n
"
);
if
(
luaL_loadfsfile
(
L
,
fname
)
!=
0
){
return
luaL_error
(
L
,
lua_tostring
(
L
,
-
1
));
}
f
=
toproto
(
L
,
-
1
);
int
stripping
=
1
;
/* strip debug information? */
file_fd
=
fs_open
(
output
,
fs_mode2flag
(
"w+"
));
if
(
file_fd
<
FS_OPEN_OK
)
{
return
luaL_error
(
L
,
"cannot open/write to file"
);
}
lua_lock
(
L
);
int
result
=
luaU_dump
(
L
,
f
,
writer
,
&
file_fd
,
stripping
);
lua_unlock
(
L
);
fs_flush
(
file_fd
);
fs_close
(
file_fd
);
file_fd
=
FS_OPEN_OK
-
1
;
if
(
result
==
LUA_ERR_CC_INTOVERFLOW
){
return
luaL_error
(
L
,
"value too big or small for target integer type"
);
}
if
(
result
==
LUA_ERR_CC_NOTINTEGER
){
return
luaL_error
(
L
,
"target lua_Number is integral but fractional value found"
);
}
return
0
;
}
// Module function map
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
...
...
@@ -330,6 +406,7 @@ const LUA_REG_TYPE node_map[] =
{
LSTRKEY
(
"input"
),
LFUNCVAL
(
node_input
)
},
{
LSTRKEY
(
"output"
),
LFUNCVAL
(
node_output
)
},
{
LSTRKEY
(
"readvdd33"
),
LFUNCVAL
(
node_readvdd33
)
},
{
LSTRKEY
(
"compile"
),
LFUNCVAL
(
node_compile
)
},
// Combined to dsleep(us, option)
// { LSTRKEY( "dsleepsetoption" ), LFUNCVAL( node_deepsleep_setoption) },
#if LUA_OPTIMIZE_MEMORY > 0
...
...
examples/fragment.lua
View file @
6e840a45
...
...
@@ -339,3 +339,11 @@ uart.on("data",4, function(data)
end
end
,
0
)
file
.
open
(
"hello.lua"
,
"w+"
)
file
.
writeline
(
[[print("hello nodemcu")]]
)
file
.
writeline
(
[[print(node.heap())]]
)
file
.
close
()
node
.
compile
(
"hello.lua"
)
dofile
(
"hello.lua"
)
dofile
(
"hello.lc"
)
pre_build/0.9.5/nodemcu_20150212.bin
0 → 100644
View file @
6e840a45
File added
pre_build/latest/nodemcu_latest.bin
View file @
6e840a45
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment