Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat Arduino互換機能の実装(WIP) #83

Merged
merged 14 commits into from
Dec 12, 2023
Merged
15 changes: 14 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
{
"cSpell.words": ["cppcheck", "mahiwa", "pico", "platformio", "tinygo", "wasi"]
"cSpell.words": [
"cppcheck",
"mahiwa",
"pico",
"platformio",
"tinygo",
"wasi"
],
"files.associations": {
"*.tcc": "cpp",
"random": "cpp",
"algorithm": "cpp",
"numeric": "cpp"
}
}
36 changes: 24 additions & 12 deletions src/lib/roader/wasm-roader.cpp
Original file line number Diff line number Diff line change
@@ -1,42 +1,52 @@
#include <lib/helper/wasm3-debugger.hpp>
#include <lib/roader/wasm-roader.hpp>
// #include <wasm/go-serial-print-and-arduino-delay.hpp>
// wasmファイルをヘッダファイルにしたもの(ヘッダファイルでなくcpp内で読むこと @see https://github.com/project-mahiwa/mahiwa-backend/issues/49 )
#include <wasm/rust-serial-print-and-arduino-delay.hpp>

// cppcheck-suppress unusedFunction
void wasm_task(void *) {
void wasm_task(void *)
{
IM3Environment env = m3_NewEnvironment();
if (!env) {
if (!env)
{
wasm3_error_printer("m3_NewEnvironment", "Error");
}

IM3Runtime runtime = m3_NewRuntime(env, WASM_STACK_SLOTS, NULL);
if (!runtime) {
if (!runtime)
{
wasm3_error_printer("m3_NewRuntime", "Error");
}

IM3Module module;
// tinygo_wasi_wasm, tinygo_wasi_wasm_lenはxxdで出せる
M3Result result = m3_ParseModule(env, &module, rust_hello_world_wasm,
rust_hello_world_wasm_len);
if (result) {
if (result)
{
wasm3_error_printer("m3_ParseModule", result);
}

result = m3_LoadModule(runtime, module);
if (result) {
if (result)
{
wasm3_error_printer("m3_LoadModule", result);
}

// WebAssemblyに埋め込む処理
result = mahiwa_LinkArduino(runtime);
if (result) {
if (result)
{
wasm3_error_printer("mahiwa_LinkArduino", result);
}
result = mahiwa_LinkSerial(runtime);
if (result)
{
wasm3_error_printer("mahiwa_LinkSerial", result);
}

IM3Function f;
result = m3_FindFunction(&f, runtime, "_start");
if (result) {
if (result)
{
wasm3_error_printer("m3_FindFunction", result);
}

Expand All @@ -46,15 +56,17 @@ void wasm_task(void *) {
result = m3_CallV(f);

// 失敗時の処理
if (result) {
if (result)
{
M3ErrorInfo info;
m3_GetErrorInfo(runtime, &info);
Serial.print("Error: ");
Serial.print(result);
Serial.print(" (");
Serial.print(info.message);
Serial.println(")");
if (info.file && strlen(info.file) && info.line) {
if (info.file && strlen(info.file) && info.line)
{
Serial.print("At ");
Serial.print(info.file);
Serial.print(":");
Expand Down
9 changes: 8 additions & 1 deletion src/lib/roader/wasm-roader.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
#pragma once
//
#include <Arduino.h>
#include <lib/wasm-functions/arduino.hpp>
#include <wasm3.h>

//
#include <lib/helper/wasm3-debugger.hpp>

// 定義読み込み
#include <lib/wasm-functions/arduino/arduino.hpp>
#include <lib/wasm-functions/arduino/serial.hpp>

// wasm3のexampleの値に従う
// m3_NewRuntimeの第2引数
// https://github.com/wasm3/wasm3-arduino/blob/main/src/m3_env.c#L170
Expand Down
34 changes: 0 additions & 34 deletions src/lib/wasm-functions/arduino.cpp

This file was deleted.

Loading