1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lupyuen-bl602-simulator

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Симулятор BL602 / BL604 в WebAssembly

Попробуйте здесь: https://lupyuen.github.io/bl602-simulator/

Чтение статьи...

Отслеживание обновлений в Twitter: https://twitter.com/MisterTechBlog/status/1423169766080933891

Симулятор BL602 в WebAssembly

Давайте симулировать firmware BL602 / BL604 на Rust в веб-браузере с помощью WebAssembly...

  1. Мы берем этот firmware Blinky на Rust для BL602...

  2. Который вызывает Rust Wrapper для IoT SDK BL602...

  3. Мы скомпилировали Rust Firmware и Rust Wrapper в WebAssembly

  4. В WebAssembly мы перехватываем вызовы к IoT SDK BL602 с помощью Shim Functions

    (Как для GPIO HAL BL602)

  5. Добавляем UI симулятора (HTML + JavaScript) для симуляции PineCone BL602 или PineDio Stack BL604...

    (Без части Blockly, так как Rust не может быть скомпилирован в веб-браузере)

    Обработка событий симулятора BL602

Почему это делается на Rust?

  • Потому что мы уже распарсили интерфейсы IoT SDK BL602 с помощью bindgen

    (При создании Rust Wrapper для BL602)

  • Что позволяет нам управлять интерфейсами IoT SDK BL602 с помощью Rust в интересных способах (Как наш safe_wrap Procedural Macro в Rust)

  • Больше о Rust Wrapper для BL602...

Почему симулировать firmware BL602 / BL604?

Почему мы это делаем? Какую проблему решаем?

  1. Укоротить цикл кодирования - сборки - загрузки - тестирования для BL602 и BL604

    (Потому что загрузка BL602 через UART довольно неудобна)

  2. Мы могли бы потенциально обнаружить ошибки вызова SDK BL602 для новых разработчиков и объяснить ошибки дружелюбным образом

    (Неверные параметры или использование, например, чтение GPIO Pin, настроенного для вывода)

  3. Сделать проще изучение встраиваемого программирования

    (Даже без использования встраиваемого оборудования)

  4. Автоматизированное тестирование прошивки BL602

  5. Отслеживание вызовов к IoT SDK BL602 для отладки

Мы можем быть в состоянии симулировать прошивку на C тоже, если мы...

  • Изменяем прошивку BL602 на C для компиляции с помощью Emscripten

  • И вызываем функции-обёртки

Сборка прошивки BL602 / BL604 на Rust для WebAssembly

Чтобы скомпилировать прошивку 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 / BL604 с WebAssembly

Чтобы запустить симулятор BL602...

  1. Запустите локальный веб-сервер

    (Как Web Server for Chrome)

  2. Перейдите к docs/wasm.html

  3. Нажмите Запустить

Журнал сборки

# Сборка прошивки на 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' ]"

Копировать выходные данные WebAssembly в папку docs для GitHub Pages

cp wasm/wasm.js docs cp wasm/wasm.wasm docs


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Симулятор BL602 / BL604 в WebAssembly. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lupyuen-bl602-simulator.git
git@api.gitlife.ru:oschina-mirror/lupyuen-bl602-simulator.git
oschina-mirror
lupyuen-bl602-simulator
lupyuen-bl602-simulator
main