Skip to content

Commit 66ca1a3

Browse files
committed
Update to v0.4.8
1 parent d43f26e commit 66ca1a3

26 files changed

+903
-589
lines changed

examples/Wasm_Blink/Wasm_Blink.ino

+7-1
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ void wasm_task(void*)
212212
Serial.print(" (");
213213
Serial.print(info.message);
214214
Serial.println(")");
215+
if (info.file && strlen(info.file) && info.line) {
216+
Serial.print("At ");
217+
Serial.print(info.file);
218+
Serial.print(":");
219+
Serial.println(info.line);
220+
}
215221
}
216222
}
217223

@@ -224,7 +230,7 @@ void setup()
224230
// Needed for native USB port only
225231
while(!Serial) {}
226232

227-
Serial.println("\nWasm3 v" M3_VERSION ", build " __DATE__ " " __TIME__);
233+
Serial.println("\nWasm3 v" M3_VERSION " (" M3_ARCH "), build " __DATE__ " " __TIME__);
228234

229235
#ifdef ESP32
230236
// On ESP32, we can launch in a separate thread
+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
/*
2+
* Wasm3 - high performance WebAssembly interpreter written in C.
3+
* Copyright © 2020 Volodymyr Shymanskyy, Steven Massey.
4+
* All rights reserved.
5+
*/
6+
7+
#include <wasm3.h>
8+
#include <m3_env.h>
9+
10+
/*
11+
* Configuration
12+
*/
13+
#define FIB_ARG "24"
14+
#define WASM_STACK_SLOTS 1024
15+
16+
/*
17+
* WebAssembly app (recursive Fibonacci)
18+
*/
19+
20+
unsigned char fib_wasm[] = {
21+
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60,
22+
0x01, 0x7f, 0x01, 0x7f, 0x03, 0x02, 0x01, 0x00, 0x07, 0x07, 0x01, 0x03,
23+
0x66, 0x69, 0x62, 0x00, 0x00, 0x0a, 0x1f, 0x01, 0x1d, 0x00, 0x20, 0x00,
24+
0x41, 0x02, 0x49, 0x04, 0x40, 0x20, 0x00, 0x0f, 0x0b, 0x20, 0x00, 0x41,
25+
0x02, 0x6b, 0x10, 0x00, 0x20, 0x00, 0x41, 0x01, 0x6b, 0x10, 0x00, 0x6a,
26+
0x0f, 0x0b
27+
};
28+
29+
/*
30+
* Engine start, liftoff!
31+
*/
32+
33+
#define FATAL(func, msg) { Serial.print("Fatal: " func " "); Serial.println(msg); return; }
34+
#define TSTART() { tstart = micros(); }
35+
#define TFINISH(s) { tend = micros(); Serial.print(s " in "); Serial.print(tend-tstart); Serial.println(" us"); }
36+
37+
void wasm_task(void*)
38+
{
39+
uint32_t tend, tstart;
40+
TSTART();
41+
42+
M3Result result = m3Err_none;
43+
44+
IM3Environment env = m3_NewEnvironment ();
45+
if (!env) FATAL("NewEnvironment", "failed");
46+
47+
IM3Runtime runtime = m3_NewRuntime (env, WASM_STACK_SLOTS, NULL);
48+
if (!runtime) FATAL("NewRuntime", "failed");
49+
50+
IM3Module module;
51+
result = m3_ParseModule (env, &module, fib_wasm, sizeof(fib_wasm)-1);
52+
if (result) FATAL("ParseModule", result);
53+
54+
result = m3_LoadModule (runtime, module);
55+
if (result) FATAL("LoadModule", result);
56+
57+
IM3Function f;
58+
result = m3_FindFunction (&f, runtime, "fib");
59+
if (result) FATAL("FindFunction", result);
60+
61+
TFINISH("Init");
62+
63+
Serial.println("Running fib(" FIB_ARG ")...");
64+
65+
TSTART();
66+
67+
const char* i_argv[2] = { FIB_ARG , NULL };
68+
result = m3_CallWithArgs (f, 1, i_argv);
69+
70+
TFINISH("Done");
71+
72+
if (result == m3Err_none) {
73+
uint32_t value = *(uint32_t*)(runtime->stack);
74+
Serial.print("Result: ");
75+
Serial.println(value);
76+
} else {
77+
M3ErrorInfo info;
78+
m3_GetErrorInfo (runtime, &info);
79+
Serial.print("Error: ");
80+
Serial.print(result);
81+
Serial.print(" (");
82+
Serial.print(info.message);
83+
Serial.println(")");
84+
if (info.file && strlen(info.file) && info.line) {
85+
Serial.print("At ");
86+
Serial.print(info.file);
87+
Serial.print(":");
88+
Serial.println(info.line);
89+
}
90+
}
91+
#ifdef ESP32
92+
vTaskDelete(NULL);
93+
#endif
94+
}
95+
96+
void setup()
97+
{
98+
Serial.begin(115200);
99+
delay(100);
100+
101+
// Wait for serial port to connect
102+
// Needed for native USB port only
103+
while(!Serial) {}
104+
105+
Serial.println("\nWasm3 v" M3_VERSION " (" M3_ARCH "), build " __DATE__ " " __TIME__);
106+
107+
#ifdef ESP32
108+
// On ESP32, we can launch in a separate thread (with 16Kb stack)
109+
Serial.println("Running a separate task");
110+
xTaskCreate(&wasm_task, "wasm3", 16*1024, NULL, 5, NULL);
111+
#else
112+
wasm_task(NULL);
113+
#endif
114+
}
115+
116+
void loop()
117+
{
118+
delay(100);
119+
}

examples_pio/Wasm_Advanced/platformio.ini

+14
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ src_build_flags =
4949
-DESP8266 -Dd_m3FixedHeap=0x6000
5050
-O3 -flto
5151

52+
[env:AdafruitPyBadge]
53+
platform = atmelsam
54+
board = adafruit_pybadge_m4
55+
56+
src_build_flags =
57+
${env.src_build_flags}
58+
-DLED_PIN=13
59+
-O3 -flto
60+
61+
#build_flags =
62+
# -Dd_m3LogNativeStack=1
63+
# -Dd_m3LogOutput=1
64+
# -Dd_m3VerboseLogs=1
65+
5266
[env:Arduino101]
5367
platform = intel_arc32
5468
board = genuino101

examples_pio/Wasm_Advanced/wasm_vm/wasm_vm.ino

+7-1
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ void wasm_task(void*)
206206
Serial.print(" (");
207207
Serial.print(info.message);
208208
Serial.println(")");
209+
if (info.file && strlen(info.file) && info.line) {
210+
Serial.print("At ");
211+
Serial.print(info.file);
212+
Serial.print(":");
213+
Serial.println(info.line);
214+
}
209215
}
210216
}
211217

@@ -218,7 +224,7 @@ void setup()
218224
// Needed for native USB port only
219225
while(!Serial) {}
220226

221-
Serial.println("\nWasm3 v" M3_VERSION ", build " __DATE__ " " __TIME__);
227+
Serial.println("\nWasm3 v" M3_VERSION " (" M3_ARCH "), build " __DATE__ " " __TIME__);
222228

223229
#ifdef ESP32
224230
// On ESP32, we can launch in a separate thread

library.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Wasm3",
3-
"version": "0.4.5",
3+
"version": "0.4.8",
44
"description": "The fastest WebAssembly interpreter. It allows you to run WASM files directly on a wide range of devices, including microcontrollers, routers, smartphones and of course within browsers.",
55
"keywords": "esp32, esp8266, wasm, webassembly, interpreter, iot, edge computing",
66
"authors": [

library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Wasm3
2-
version=0.4.5
2+
version=0.4.8
33
author=Volodymyr Shymanskyy <[email protected]>, Steven Massey <[email protected]>
44
license=MIT
55
maintainer=Volodymyr Shymanskyy <[email protected]>

src/m3_api_defs.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#define m3ApiGetArg(TYPE, NAME) TYPE NAME = * ((TYPE *) (_sp++));
1919
#define m3ApiGetArgMem(TYPE, NAME) TYPE NAME = (TYPE)m3ApiOffsetToPtr(* ((u32 *) (_sp++)));
2020

21-
#define m3ApiRawFunction(NAME) const void * NAME (IM3Runtime runtime, uint64_t * _sp, void * _mem)
21+
#define m3ApiRawFunction(NAME) const void * NAME (IM3Runtime runtime, uint64_t * _sp, void * _mem, void * userdata)
2222
#define m3ApiReturn(VALUE) { *raw_return = (VALUE); return m3Err_none; }
2323
#define m3ApiTrap(VALUE) { return VALUE; }
2424
#define m3ApiSuccess() { return m3Err_none; }

src/m3_api_libc.c

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ m3ApiRawFunction(m3_libc_memset)
4343
m3ApiReturn(result);
4444
}
4545

46-
4746
m3ApiRawFunction(m3_libc_memmove)
4847
{
4948
m3ApiReturnType (int32_t)

0 commit comments

Comments
 (0)