From e24528051b9ed26157bee93e32e37e7b06b8f4cc Mon Sep 17 00:00:00 2001 From: Ulf Lilleengen Date: Mon, 13 Sep 2021 14:35:40 +0200 Subject: Add WASM support for executor * Adds an executor for WASM runtimes based on wasm_bindgen. * Add time driver based on JS time handling. * Add example that can run in browser locally. * Update to critical-section version that supports 'std' flag --- examples/wasm/src/lib.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 examples/wasm/src/lib.rs (limited to 'examples/wasm/src') diff --git a/examples/wasm/src/lib.rs b/examples/wasm/src/lib.rs new file mode 100644 index 000000000..0aa32a70b --- /dev/null +++ b/examples/wasm/src/lib.rs @@ -0,0 +1,37 @@ +#![feature(type_alias_impl_trait)] +#![allow(incomplete_features)] + +use embassy::{ + executor::Spawner, + time::{Duration, Timer}, +}; + +#[embassy::task] +async fn ticker() { + let window = web_sys::window().expect("no global `window` exists"); + + let mut counter = 0; + loop { + let document = window.document().expect("should have a document on window"); + let list = document + .get_element_by_id("log") + .expect("should have a log element"); + + let li = document + .create_element("li") + .expect("error creating list item element"); + li.set_text_content(Some(&format!("tick {}", counter))); + + list.append_child(&li).expect("error appending list item"); + log::info!("tick {}", counter); + counter += 1; + + Timer::after(Duration::from_secs(1)).await; + } +} + +#[embassy::main] +async fn main(spawner: Spawner) { + wasm_logger::init(wasm_logger::Config::default()); + spawner.spawn(ticker()).unwrap(); +} -- cgit