diff --git a/.vscode/settings.json b/.vscode/settings.json index c35cb3c..c00d8ed 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ + "COREMARK", "cppcheck", "mahiwa", "pico", @@ -14,6 +15,14 @@ "numeric": "cpp", "cmath": "cpp", "cinttypes": "cpp", - "cstdlib": "cpp" + "cstdlib": "cpp", + "exception": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "limits": "cpp", + "streambuf": "cpp", + "tuple": "cpp", + "type_traits": "cpp" } } diff --git a/Makefile b/Makefile index 87613c9..58397c0 100644 --- a/Makefile +++ b/Makefile @@ -30,3 +30,15 @@ r-c3: debug-atom: pio debug -e m5stack-atom + +coremark: + cp /opt/usuyuki/mahiwa_space/wasm-coremark/coremark-minimal.wasm /opt/usuyuki/.cache/mahiwa/user.wasm + wasm2wat /opt/usuyuki/.cache/mahiwa/user.wasm -o /opt/usuyuki/.cache/mahiwa/user.wat + (cd /opt/usuyuki/.cache/mahiwa && xxd -i user.wasm > user.h) + cp /opt/usuyuki/.cache/mahiwa/user.h /opt/usuyuki/mahiwa_space/mahiwa-backend/src/wasm/user.h + +coremarkh: + cp /home/usuyuki/mahiwa_space/wasm-coremark/coremark-minimal.wasm /home/usuyuki/.cache/mahiwa/user.wasm + wasm2wat /home/usuyuki/.cache/mahiwa/user.wasm -o /home/usuyuki/.cache/mahiwa/user.wat + (cd /home/usuyuki/.cache/mahiwa && xxd -i user.wasm > user.h) + cp /home/usuyuki/.cache/mahiwa/user.h /home/usuyuki/mahiwa_space/mahiwa-backend/src/wasm/user.h diff --git a/platformio.ini b/platformio.ini index b03b0d3..3778a3f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -80,4 +80,5 @@ lib_deps = wasm3/Wasm3@^0.5.0 build_flags = ${env.build_flags} -DESP32 + -DUSE_COREMARK -DCORE_DEBUG_LEVEL=5 diff --git a/src/lib/roader/wasm-roader.cpp b/src/lib/roader/wasm-roader.cpp index f7c87a3..97a5900 100644 --- a/src/lib/roader/wasm-roader.cpp +++ b/src/lib/roader/wasm-roader.cpp @@ -41,9 +41,22 @@ void wasm_task(void *) { wasm3_error_printer("mahiwa_LinkSerial", result); } +#ifdef USE_COREMARK + Serial.println("call coremark function link"); + result = mahiwa_LinkCoremark(runtime); + if (result) + { + wasm3_error_printer("mahiwa_LinkCoremark", result); + } +#endif IM3Function f; +#ifdef USE_COREMARK + Serial.println("coremark mode is enabled!!"); + result = m3_FindFunction(&f, runtime, "run"); +#else result = m3_FindFunction(&f, runtime, "_start"); +#endif if (result) { wasm3_error_printer("m3_FindFunction", result); @@ -53,9 +66,14 @@ void wasm_task(void *) // 実行が成功したら終わる result = m3_CallV(f); - +#ifdef USE_COREMARK + float value = 0; + result = m3_GetResultsV(f, &value); + Serial.print("coremark score:"); + Serial.println(value, 10); +#endif // 失敗時の処理 - if (result) + if (result != m3Err_none) { M3ErrorInfo info; m3_GetErrorInfo(runtime, &info); diff --git a/src/lib/roader/wasm-roader.hpp b/src/lib/roader/wasm-roader.hpp index 7d85d71..db08374 100644 --- a/src/lib/roader/wasm-roader.hpp +++ b/src/lib/roader/wasm-roader.hpp @@ -9,6 +9,9 @@ // 定義読み込み #include #include +#ifdef USE_COREMARK +#include +#endif // wasm3のexampleの値に従う // m3_NewRuntimeの第2引数 diff --git a/src/lib/wasm-functions/mahiwa/coremark/coremark.cpp b/src/lib/wasm-functions/mahiwa/coremark/coremark.cpp new file mode 100644 index 0000000..afc9b5a --- /dev/null +++ b/src/lib/wasm-functions/mahiwa/coremark/coremark.cpp @@ -0,0 +1,22 @@ +#include + +// coremark-minimalに必要な関数を用意する +// (import "env" "clock_ms" (func (;0;) (type 8))) +// (type (;8;) (func (result i64))) +m3ApiRawFunction(m3_clock_ms) +{ + // cppcheck-suppress cstyleCast + m3ApiReturnType(int64_t); + m3ApiReturn(millis()); + m3ApiSuccess(); +} + +M3Result mahiwa_LinkCoremark(IM3Runtime runtime) +{ + Serial.println("link coremark function"); + IM3Module module = runtime->modules; + + m3_LinkRawFunction(module, "env", "clock_ms", "I()", &m3_clock_ms); + + return m3Err_none; +} diff --git a/src/lib/wasm-functions/mahiwa/coremark/coremark.hpp b/src/lib/wasm-functions/mahiwa/coremark/coremark.hpp new file mode 100644 index 0000000..7469a69 --- /dev/null +++ b/src/lib/wasm-functions/mahiwa/coremark/coremark.hpp @@ -0,0 +1,6 @@ +#pragma once + +#include +#include + +M3Result mahiwa_LinkCoremark(IM3Runtime runtime); diff --git a/src/main.cpp b/src/main.cpp index 4c661c3..39a2039 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,12 +11,11 @@ void setup() Serial.println(cos(0)); Serial.println("Project Mahiwa started🎉"); - Serial.print("cos(0.0)"); - Serial.println(cos(0.0)); - Serial.print("max(100,200)"); - Serial.println(max(100, 200)); #ifdef ESP32 Serial.println("ESP32 Mode"); + Serial.print("CPU Frequency:"); + Serial.print(ESP.getCpuFreqMHz()); + Serial.println(" MHz"); // xTaskCreatePinnedToCoreはFreeRTOSの関数 // ESP32ではデフォルトでFreeRTOSが組み込まれているため下記のような形となる. // wasm3-arduinoのexampleでは16kbごとに区切るためと書かれている.