Communicate between threads
This commit is contained in:
parent
85bbc042bf
commit
5475bb6cf9
66
src/main.rs
66
src/main.rs
@ -7,9 +7,13 @@
|
|||||||
)]
|
)]
|
||||||
#![deny(clippy::large_stack_frames)]
|
#![deny(clippy::large_stack_frames)]
|
||||||
|
|
||||||
use core::mem::MaybeUninit;
|
use core::{
|
||||||
|
cell::{Cell, RefCell},
|
||||||
|
mem::MaybeUninit,
|
||||||
|
};
|
||||||
|
|
||||||
use alloc::boxed::Box;
|
use alloc::{borrow::ToOwned, boxed::Box, string::String, sync::Arc, vec::Vec};
|
||||||
|
use critical_section::{CriticalSection, Mutex};
|
||||||
use embassy_executor::Spawner;
|
use embassy_executor::Spawner;
|
||||||
use esp_hal::{
|
use esp_hal::{
|
||||||
clock::{ClockConfig, CpuClock},
|
clock::{ClockConfig, CpuClock},
|
||||||
@ -59,23 +63,6 @@ fn main() -> ! {
|
|||||||
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
|
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
|
||||||
let peripherals = esp_hal::init(config);
|
let peripherals = esp_hal::init(config);
|
||||||
|
|
||||||
static mut THREAD_2_STACK: Stack<1024> = esp_hal::system::Stack {
|
|
||||||
mem: MaybeUninit::new([0u8; 1024]),
|
|
||||||
};
|
|
||||||
|
|
||||||
let timg0 = TimerGroup::new(peripherals.TIMG0);
|
|
||||||
let software_interrupt = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT);
|
|
||||||
esp_rtos::start(timg0.timer0, software_interrupt.software_interrupt0);
|
|
||||||
esp_rtos::start_second_core(
|
|
||||||
peripherals.CPU_CTRL,
|
|
||||||
software_interrupt.software_interrupt1,
|
|
||||||
unsafe {
|
|
||||||
#[allow(static_mut_refs)]
|
|
||||||
&mut THREAD_2_STACK
|
|
||||||
},
|
|
||||||
|| thread_2_main(),
|
|
||||||
);
|
|
||||||
|
|
||||||
// The following pins are used to bootstrap the chip. They are available
|
// The following pins are used to bootstrap the chip. They are available
|
||||||
// for use, but check the datasheet of the module for more information on them.
|
// for use, but check the datasheet of the module for more information on them.
|
||||||
// - GPIO0
|
// - GPIO0
|
||||||
@ -170,19 +157,52 @@ fn main() -> ! {
|
|||||||
// let input_6 = Input::new(peripherals.GPIO26, pull_up_cfg);
|
// let input_6 = Input::new(peripherals.GPIO26, pull_up_cfg);
|
||||||
// let input_7 = Input::new(peripherals.GPIO27, pull_up_cfg);
|
// let input_7 = Input::new(peripherals.GPIO27, pull_up_cfg);
|
||||||
|
|
||||||
|
let messages = Arc::new(Mutex::new(RefCell::new(Vec::<String>::new())));
|
||||||
|
|
||||||
|
static mut THREAD_2_STACK: Stack<1024> = esp_hal::system::Stack {
|
||||||
|
mem: MaybeUninit::new([0u8; 1024]),
|
||||||
|
};
|
||||||
|
|
||||||
|
let timg0 = TimerGroup::new(peripherals.TIMG0);
|
||||||
|
let software_interrupt = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT);
|
||||||
|
esp_rtos::start(timg0.timer0, software_interrupt.software_interrupt0);
|
||||||
|
esp_rtos::start_second_core(
|
||||||
|
peripherals.CPU_CTRL,
|
||||||
|
software_interrupt.software_interrupt1,
|
||||||
|
unsafe {
|
||||||
|
#[allow(static_mut_refs)]
|
||||||
|
&mut THREAD_2_STACK
|
||||||
|
},
|
||||||
|
{
|
||||||
|
let messages = messages.clone();
|
||||||
|
|| thread_2_main(messages)
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let mut test_delay = Delay::new();
|
let mut test_delay = Delay::new();
|
||||||
loop {
|
loop {
|
||||||
state_mgr.update();
|
critical_section::with(|cs| {
|
||||||
state_mgr.draw();
|
let mut borrowed = messages.borrow(cs).borrow_mut();
|
||||||
|
for message in borrowed.iter() {
|
||||||
|
log::info!("Received: {}", message);
|
||||||
|
}
|
||||||
|
borrowed.clear();
|
||||||
|
})
|
||||||
|
// state_mgr.update();
|
||||||
|
// state_mgr.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
// for inspiration have a look at the examples at https://github.com/esp-rs/esp-hal/tree/esp-hal-v1.1.0/examples
|
// for inspiration have a look at the examples at https://github.com/esp-rs/esp-hal/tree/esp-hal-v1.1.0/examples
|
||||||
}
|
}
|
||||||
|
|
||||||
fn thread_2_main() {
|
fn thread_2_main(messages: Arc<Mutex<RefCell<Vec<String>>>>) {
|
||||||
let delay = Delay::new();
|
let delay = Delay::new();
|
||||||
loop {
|
loop {
|
||||||
delay.delay_millis(1000);
|
delay.delay_millis(1000);
|
||||||
log::info!("Hello there!")
|
log::info!("Sent message");
|
||||||
|
critical_section::with(|cs| {
|
||||||
|
let mut borrowed = messages.borrow(cs).borrow_mut();
|
||||||
|
borrowed.push("Message!".to_owned());
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user