Попробуйте здесь: https://lupyuen.github.io/bl602-simulator/
Чтение статьи...
Отслеживание обновлений в Twitter: https://twitter.com/MisterTechBlog/status/1423169766080933891
Давайте симулировать firmware BL602 / BL604 на Rust в веб-браузере с помощью WebAssembly...
Мы берем этот firmware Blinky на Rust для BL602...
Который вызывает Rust Wrapper для IoT SDK BL602...
Мы скомпилировали Rust Firmware и Rust Wrapper в WebAssembly
В WebAssembly мы перехватываем вызовы к IoT SDK BL602 с помощью Shim Functions
(Как для GPIO HAL BL602)
Добавляем UI симулятора (HTML + JavaScript) для симуляции PineCone BL602 или PineDio Stack BL604...
(Без части Blockly, так как Rust не может быть скомпилирован в веб-браузере)
Почему это делается на Rust?
Потому что мы уже распарсили интерфейсы IoT SDK BL602 с помощью bindgen
(При создании Rust Wrapper для BL602)
Что позволяет нам управлять интерфейсами IoT SDK BL602 с помощью Rust в интересных способах (Как наш safe_wrap
Procedural Macro в Rust)
Больше о Rust Wrapper для BL602...
Почему мы это делаем? Какую проблему решаем?
Укоротить цикл кодирования - сборки - загрузки - тестирования для BL602 и BL604
(Потому что загрузка BL602 через UART довольно неудобна)
Мы могли бы потенциально обнаружить ошибки вызова SDK BL602 для новых разработчиков и объяснить ошибки дружелюбным образом
(Неверные параметры или использование, например, чтение GPIO Pin, настроенного для вывода)
Сделать проще изучение встраиваемого программирования
(Даже без использования встраиваемого оборудования)
Автоматизированное тестирование прошивки BL602
Отслеживание вызовов к IoT SDK BL602 для отладки
Мы можем быть в состоянии симулировать прошивку на C тоже, если мы...
Изменяем прошивку BL602 на C для компиляции с помощью Emscripten
И вызываем функции-обёртки
Чтобы скомпилировать прошивку BL602 на Rust в WebAssembly...
# Настройка Emscripten. См. https://emscripten.org/docs/getting_started/downloads.html
# Для Windows: emsdk\emsdk_env.bat
. ~/emsdk/emsdk_env.sh
# Клонирование исходного кода
git clone --recursive https://github.com/lupyuen/bl602-simulator
cd bl602-simulator
# Компиляция прошивки на Rust, библиотеки симулятора на Rust и связывание с Emscripten
make
```# Производит выходные файлы в папке `docs`: wasm.js, wasm.wasm
Чтобы запустить симулятор BL602...
Запустите локальный веб-сервер
Перейдите к docs/wasm.html
Нажмите Запустить
# Сборка прошивки на Rust и библиотеки симулятора на Rust
cargo build --target wasm32-unknown-emscripten
Compiling proc-macro2 v1.0.28
Compiling unicode-xid v0.2.2
Compiling syn v1.0.74
Compiling memchr v2.4.0
Compiling serde_derive v1.0.127
Compiling cty v0.2.1
Compiling serde v1.0.127
Compiling ryu v1.0.5
Compiling heapless v0.7.4
Compiling rustc-serialize v0.3.24
Compiling lazy_static v1.4.0
Compiling serde_json v1.0.66
Compiling cstr_core v0.2.4
Compiling quote v1.0.9
Compiling bl602-macros v0.0.2
Compiling bl602-sdk v0.0.6
Compiling app v0.0.1 (/mnt/c/pinecone/bl602-simulator/sdk_app_rust_gpio/rust)
Compiling bl602-simulator v0.0.1 (/mnt/c/pinecone/bl602-simulator/bl602-simulator)
Finished dev [unoptimized + debuginfo] target(s) in 1m 43s
# Связывание прошивки на Rust и библиотеки симулятора на Rust с Emscripten
emcc -o wasm/wasm.html \
target/wasm32-unknown-emscripten/debug/libapp.a \
target/wasm32-unknown-emscripten/debug/libbl602_simulator.a \
wasm/wasm.o \
-g \
-s WASM=1 \
-s DISABLE_EXCEPTION_CATCHING=0 \
-s "EXPORTED_FUNCTIONS=[ '_rust_main', '_clear_simulation_events', '_get_simulation_events' ]" \
-s "EXTRA_EXPORTED_RUNTIME_METHODS=[ 'cwrap', 'allocate', 'intArrayFromString', 'UTF8ToString' ]"
cp wasm/wasm.js docs cp wasm/wasm.wasm docs
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )