From 65757d246a098f8b1ea00e0810c0549b568ab4c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= <rj@quartiq.de> Date: Sat, 30 Dec 2023 12:56:20 +0000 Subject: [PATCH 1/2] port to rtic2 --- Cargo.lock | 172 +++++++++++++++++++++++++++++------------- Cargo.toml | 3 +- src/bin/dual-iir.rs | 97 +++++++++++++----------- src/bin/lockin.rs | 103 ++++++++++++++----------- src/hardware/mod.rs | 2 +- src/hardware/setup.rs | 5 +- 6 files changed, 236 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8e539dd24..d237f120a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,7 +9,7 @@ dependencies = [ "bit_field", "bitflags 2.4.1", "bytemuck", - "embedded-hal", + "embedded-hal 0.2.7", ] [[package]] @@ -173,7 +173,7 @@ dependencies = [ "bare-metal 0.2.5", "bitfield", "critical-section", - "embedded-hal", + "embedded-hal 0.2.7", "volatile-register", ] @@ -197,34 +197,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "cortex-m-rtic" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d696ae7390bdb9f7978f71ca7144256a2c4616240a6df9002da3c451f9fc8f02" -dependencies = [ - "bare-metal 1.0.0", - "cortex-m 0.7.7", - "cortex-m-rtic-macros", - "heapless 0.7.16", - "rtic-core", - "rtic-monotonic", - "version_check", -] - -[[package]] -name = "cortex-m-rtic-macros" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eefb40b1ca901c759d29526e5c8a0a1b246c20caaa5b4cc5d0f0b94debecd4c7" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "rtic-syntax", - "syn 1.0.109", -] - [[package]] name = "critical-section" version = "1.1.2" @@ -250,6 +222,12 @@ dependencies = [ "void", ] +[[package]] +name = "embedded-hal" +version = "1.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc402f79e1fd22731ca945b4f97b5ff37e7b3f379312595c42bb2e8811c29920" + [[package]] name = "embedded-io" version = "0.6.1" @@ -302,6 +280,12 @@ dependencies = [ "syn 2.0.38", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -320,6 +304,30 @@ dependencies = [ "gcd", ] +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "gcd" version = "2.3.0" @@ -387,9 +395,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heapless" @@ -438,11 +446,11 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ - "autocfg", + "equivalent", "hashbrown", ] @@ -503,7 +511,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f05acdc7a7d6da7b9be48c2d1de2f9757d37d3a83564aa82b4ae6d7ad15d0db6" dependencies = [ - "embedded-hal", + "embedded-hal 0.2.7", ] [[package]] @@ -535,7 +543,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c5a338372c83c3eff68c07a23fe00dff2b2c9195583a2d464292919bc27de04" dependencies = [ "bit_field", - "embedded-hal", + "embedded-hal 0.2.7", "num_enum 0.5.11", "paste", ] @@ -787,6 +795,18 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.27" @@ -868,29 +888,78 @@ dependencies = [ ] [[package]] -name = "rtic-core" +name = "rtic" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "857ce76a2517808a303bcb7e5b6d4a9c1d84e5de88b302aec2e53744633c0f4d" +dependencies = [ + "atomic-polyfill 1.0.3", + "bare-metal 1.0.0", + "cortex-m 0.7.7", + "critical-section", + "rtic-core", + "rtic-macros", +] + +[[package]] +name = "rtic-common" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9369355b04d06a3780ec0f51ea2d225624db777acbc60abd8ca4832da5c1a42" +checksum = "0786b50b81ef9d2a944a000f60405bb28bf30cd45da2d182f3fe636b2321f35c" +dependencies = [ + "critical-section", +] [[package]] -name = "rtic-monotonic" +name = "rtic-core" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8b0b822d1a366470b9cea83a1d4e788392db763539dc4ba022bcc787fece82" +checksum = "d9369355b04d06a3780ec0f51ea2d225624db777acbc60abd8ca4832da5c1a42" [[package]] -name = "rtic-syntax" -version = "1.0.3" +name = "rtic-macros" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5e215601dc467752c2bddc6284a622c6f3d2bab569d992adcd5ab7e4cb9478" +checksum = "8617533990b728e31bc65fcec8fec51fa1b4000fb33189ebeb05fb9d8625444d" dependencies = [ "indexmap", + "proc-macro-error", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "rtic-monotonic" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb8b0b822d1a366470b9cea83a1d4e788392db763539dc4ba022bcc787fece82" + +[[package]] +name = "rtic-monotonics" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83175938634a0fb86facfc5bf4dd172317b26c4e91056438f27df093626b233f" +dependencies = [ + "atomic-polyfill 1.0.3", + "cfg-if", + "cortex-m 0.7.7", + "embedded-hal 1.0.0-rc.3", + "fugit", + "rtic-time", +] + +[[package]] +name = "rtic-time" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f3a0f0828950e308af95960b75fb4284b0c404b1e334ae0abe13f52b7650ab" +dependencies = [ + "critical-section", + "futures-util", + "rtic-common", +] + [[package]] name = "rtt-logger" version = "0.2.1" @@ -1020,7 +1089,7 @@ checksum = "05f8438a40b91c8b9531c664e9680c55b92bd78cd6809a8b45b4512b1e5765f2" dependencies = [ "atomic-polyfill 0.1.11", "cortex-m 0.6.7", - "embedded-hal", + "embedded-hal 0.2.7", "nb 0.1.3", ] @@ -1032,7 +1101,7 @@ checksum = "c6b8d3f0e34309c22ca4a9a27d24fa493e31573485f3493802b75b9d706756a6" dependencies = [ "atomic-polyfill 1.0.3", "cortex-m 0.7.7", - "embedded-hal", + "embedded-hal 0.2.7", "nb 1.1.0", ] @@ -1102,8 +1171,7 @@ dependencies = [ "built", "cortex-m 0.7.7", "cortex-m-rt", - "cortex-m-rtic", - "embedded-hal", + "embedded-hal 0.2.7", "embedded-io", "embedded-storage", "enum-iterator", @@ -1123,6 +1191,8 @@ dependencies = [ "postcard", "rand_core", "rand_xorshift", + "rtic", + "rtic-monotonics", "rtt-logger", "rtt-target", "sequential-storage", @@ -1165,7 +1235,7 @@ dependencies = [ "cast", "cortex-m 0.7.7", "embedded-dma", - "embedded-hal", + "embedded-hal 0.2.7", "embedded-storage", "fugit", "nb 1.1.0", @@ -1205,7 +1275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e948d523b316939545d8b21a48c27aef150ce25321b9f95ff7978647a806a6fe" dependencies = [ "cortex-m 0.7.7", - "embedded-hal", + "embedded-hal 0.2.7", "usb-device", "vcell", ] @@ -1296,7 +1366,7 @@ name = "usbd-serial" version = "0.2.0" source = "git+https://github.com/rust-embedded-community/usbd-serial?rev=096742c1c480f6f63c1a936a3c23ede7993c624d#096742c1c480f6f63c1a936a3c23ede7993c624d" dependencies = [ - "embedded-hal", + "embedded-hal 0.2.7", "embedded-io", "nb 1.1.0", "usb-device", diff --git a/Cargo.toml b/Cargo.toml index 4e1db96cf..8ff004ae5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,8 @@ rtt-target = "0.3" serde = { version = "1.0", features = ["derive"], default-features = false } serde-json-core = "0.5" heapless = { version = "0.7.16", features = ["serde"] } -cortex-m-rtic = "1.0" +rtic = { version = "2.0", features = ["thumbv7-backend"] } +rtic-monotonics = { version = "1.0", features = ["cortex-m-systick"] } embedded-hal = "0.2.7" num_enum = { version = "0.7.1", default-features = false } paste = "1" diff --git a/src/bin/dual-iir.rs b/src/bin/dual-iir.rs index 70e2861fe..9d07b0171 100644 --- a/src/bin/dual-iir.rs +++ b/src/bin/dual-iir.rs @@ -25,14 +25,16 @@ //! ## Livestreaming //! This application streams raw ADC and DAC data over UDP. Refer to //! [stabilizer::net::data_stream](../stabilizer/net/data_stream/index.html) for more information. -#![deny(warnings)] +#![feature(type_alias_impl_trait)] #![no_std] #![no_main] use core::mem::MaybeUninit; use core::sync::atomic::{fence, Ordering}; -use fugit::ExtU64; +use rtic_monotonics::Monotonic; + +use fugit::ExtU32; use mutex_trait::prelude::*; use idsp::iir; @@ -178,9 +180,6 @@ impl Default for Settings { mod app { use super::*; - #[monotonic(binds = SysTick, default = true, priority = 2)] - type Monotonic = Systick; - #[shared] struct Shared { usb: UsbDevice, @@ -205,8 +204,8 @@ mod app { } #[init] - fn init(c: init::Context) -> (Shared, Local, init::Monotonics) { - let clock = SystemTimer::new(|| monotonics::now().ticks() as u32); + fn init(c: init::Context) -> (Shared, Local) { + let clock = SystemTimer::new(|| Systick::now().ticks() as u32); // Configure the microcontroller let (stabilizer, _pounder) = hardware::setup::setup( @@ -274,13 +273,14 @@ mod app { telemetry::spawn().unwrap(); ethernet_link::spawn().unwrap(); usb::spawn().unwrap(); - start::spawn_after(100.millis()).unwrap(); + start::spawn().unwrap(); - (shared, local, init::Monotonics(stabilizer.systick)) + (shared, local) } #[task(priority = 1, local=[sampling_timer])] - fn start(c: start::Context) { + async fn start(c: start::Context) { + Systick::delay(100.millis()).await; // Start sampling ADCs and DACs. c.local.sampling_timer.start(); } @@ -308,6 +308,7 @@ mod app { settings, telemetry, signal_generator, + .. } = c.shared; let process::LocalResources { @@ -316,6 +317,7 @@ mod app { dacs: (dac0, dac1), iir_state, generator, + .. } = c.local; (settings, telemetry, signal_generator).lock( @@ -418,7 +420,7 @@ mod app { } #[task(priority = 1, local=[afes], shared=[network, settings, signal_generator])] - fn settings_update(mut c: settings_update::Context) { + async fn settings_update(mut c: settings_update::Context) { let settings = c.shared.network.lock(|net| *net.miniconf.settings()); c.shared.settings.lock(|current| *current = settings); @@ -446,45 +448,52 @@ mod app { } #[task(priority = 1, shared=[network, settings, telemetry], local=[cpu_temp_sensor])] - fn telemetry(mut c: telemetry::Context) { - let telemetry: TelemetryBuffer = - c.shared.telemetry.lock(|telemetry| *telemetry); - - let (gains, telemetry_period) = c - .shared - .settings - .lock(|settings| (settings.afe, settings.telemetry_period)); - - c.shared.network.lock(|net| { - net.telemetry.publish(&telemetry.finalize( - gains[0], - gains[1], - c.local.cpu_temp_sensor.get_temperature().unwrap(), - )) - }); - - // Schedule the telemetry task in the future. - telemetry::Monotonic::spawn_after((telemetry_period as u64).secs()) - .unwrap(); + async fn telemetry(mut c: telemetry::Context) { + loop { + let telemetry: TelemetryBuffer = + c.shared.telemetry.lock(|telemetry| *telemetry); + + let (gains, telemetry_period) = c + .shared + .settings + .lock(|settings| (settings.afe, settings.telemetry_period)); + + c.shared.network.lock(|net| { + net.telemetry.publish(&telemetry.finalize( + gains[0], + gains[1], + c.local.cpu_temp_sensor.get_temperature().unwrap(), + )) + }); + + Systick::delay((telemetry_period as u32).secs()).await; + } } #[task(priority = 1, shared=[usb], local=[usb_terminal])] - fn usb(mut c: usb::Context) { - // Handle the USB serial terminal. - c.shared.usb.lock(|usb| { - usb.poll(&mut [c.local.usb_terminal.interface_mut().inner_mut()]); - }); - - c.local.usb_terminal.process().unwrap(); - - // Schedule to run this task every 10 milliseconds. - usb::spawn_after(10u64.millis()).unwrap(); + async fn usb(mut c: usb::Context) { + { + // Handle the USB serial terminal. + c.shared.usb.lock(|usb| { + usb.poll(&mut [c + .local + .usb_terminal + .interface_mut() + .inner_mut()]); + }); + + c.local.usb_terminal.process().unwrap(); + + Systick::delay(10.millis()).await; + } } #[task(priority = 1, shared=[network])] - fn ethernet_link(mut c: ethernet_link::Context) { - c.shared.network.lock(|net| net.processor.handle_link()); - ethernet_link::Monotonic::spawn_after(1.secs()).unwrap(); + async fn ethernet_link(mut c: ethernet_link::Context) { + loop { + c.shared.network.lock(|net| net.processor.handle_link()); + Systick::delay(1.secs()).await; + } } #[task(binds = ETH, priority = 1)] diff --git a/src/bin/lockin.rs b/src/bin/lockin.rs index c4237c8be..5b85c13c2 100644 --- a/src/bin/lockin.rs +++ b/src/bin/lockin.rs @@ -24,7 +24,7 @@ //! ## Livestreaming //! This application streams raw ADC and DAC data over UDP. Refer to //! [stabilizer::net::data_stream](../stabilizer/net/data_stream/index.html) for more information. -#![deny(warnings)] +#![feature(type_alias_impl_trait)] #![no_std] #![no_main] @@ -34,7 +34,9 @@ use core::{ sync::atomic::{fence, Ordering}, }; -use fugit::ExtU64; +use rtic_monotonics::Monotonic; + +use fugit::ExtU32; use mutex_trait::prelude::*; use idsp::{Accu, Complex, ComplexExt, Filter, Lockin, Lowpass, Repeat, RPLL}; @@ -217,9 +219,6 @@ impl Default for Settings { mod app { use super::*; - #[monotonic(binds = SysTick, default = true, priority = 2)] - type Monotonic = Systick; - #[shared] struct Shared { usb: UsbDevice, @@ -245,8 +244,8 @@ mod app { } #[init] - fn init(c: init::Context) -> (Shared, Local, init::Monotonics) { - let clock = SystemTimer::new(|| monotonics::now().ticks() as u32); + fn init(c: init::Context) -> (Shared, Local) { + let clock = SystemTimer::new(|| Systick::now().ticks() as u32); // Configure the microcontroller let (mut stabilizer, _pounder) = hardware::setup::setup( @@ -315,7 +314,7 @@ mod app { settings_update::spawn().unwrap(); telemetry::spawn().unwrap(); ethernet_link::spawn().unwrap(); - start::spawn_after(100.millis()).unwrap(); + start::spawn().unwrap(); // Start recording digital input timestamps. stabilizer.timestamp_timer.start(); @@ -323,11 +322,12 @@ mod app { // Enable the timestamper. local.timestamper.start(); - (shared, local, init::Monotonics(stabilizer.systick)) + (shared, local) } #[task(priority = 1, local=[sampling_timer])] - fn start(c: start::Context) { + async fn start(c: start::Context) { + Systick::delay(100.millis()).await; // Start sampling ADCs and DACs. c.local.sampling_timer.start(); } @@ -345,6 +345,7 @@ mod app { let process::SharedResources { settings, telemetry, + .. } = c.shared; let process::LocalResources { @@ -355,6 +356,7 @@ mod app { lockin, signal_generator, generator, + .. } = c.local; (settings, telemetry).lock(|settings, telemetry| { @@ -480,7 +482,7 @@ mod app { } #[task(priority = 1, local=[afes], shared=[network, settings])] - fn settings_update(mut c: settings_update::Context) { + async fn settings_update(mut c: settings_update::Context) { let settings = c.shared.network.lock(|net| *net.miniconf.settings()); c.shared.settings.lock(|current| *current = settings); @@ -492,50 +494,59 @@ mod app { } #[task(priority = 1, local=[digital_inputs, cpu_temp_sensor], shared=[network, settings, telemetry])] - fn telemetry(mut c: telemetry::Context) { - let mut telemetry: TelemetryBuffer = - c.shared.telemetry.lock(|telemetry| *telemetry); - - telemetry.digital_inputs = [ - c.local.digital_inputs.0.is_high(), - c.local.digital_inputs.1.is_high(), - ]; - - let (gains, telemetry_period) = c - .shared - .settings - .lock(|settings| (settings.afe, settings.telemetry_period)); - - c.shared.network.lock(|net| { - net.telemetry.publish(&telemetry.finalize( - gains[0], - gains[1], - c.local.cpu_temp_sensor.get_temperature().unwrap(), - )) - }); + async fn telemetry(mut c: telemetry::Context) { + loop { + let mut telemetry: TelemetryBuffer = + c.shared.telemetry.lock(|telemetry| *telemetry); + + telemetry.digital_inputs = [ + c.local.digital_inputs.0.is_high(), + c.local.digital_inputs.1.is_high(), + ]; + + let (gains, telemetry_period) = c + .shared + .settings + .lock(|settings| (settings.afe, settings.telemetry_period)); + + c.shared.network.lock(|net| { + net.telemetry.publish(&telemetry.finalize( + gains[0], + gains[1], + c.local.cpu_temp_sensor.get_temperature().unwrap(), + )) + }); - // Schedule the telemetry task in the future. - telemetry::Monotonic::spawn_after((telemetry_period as u64).secs()) - .unwrap(); + // Schedule the telemetry task in the future. + Systick::delay((telemetry_period as u32).secs()).await; + } } #[task(priority = 1, shared=[usb], local=[usb_terminal])] - fn usb(mut c: usb::Context) { - // Handle the USB serial terminal. - c.shared.usb.lock(|usb| { - usb.poll(&mut [c.local.usb_terminal.interface_mut().inner_mut()]); - }); + async fn usb(mut c: usb::Context) { + loop { + // Handle the USB serial terminal. + c.shared.usb.lock(|usb| { + usb.poll(&mut [c + .local + .usb_terminal + .interface_mut() + .inner_mut()]); + }); - c.local.usb_terminal.process().unwrap(); + c.local.usb_terminal.process().unwrap(); - // Schedule to run this task every 10 milliseconds. - usb::spawn_after(10u64.millis()).unwrap(); + // Schedule to run this task every 10 milliseconds. + Systick::delay(10.millis()).await; + } } #[task(priority = 1, shared=[network])] - fn ethernet_link(mut c: ethernet_link::Context) { - c.shared.network.lock(|net| net.processor.handle_link()); - ethernet_link::Monotonic::spawn_after(1.secs()).unwrap(); + async fn ethernet_link(mut c: ethernet_link::Context) { + loop { + c.shared.network.lock(|net| net.processor.handle_link()); + Systick::delay(1.secs()).await; + } } #[task(binds = ETH, priority = 1)] diff --git a/src/hardware/mod.rs b/src/hardware/mod.rs index 477192466..21746676c 100644 --- a/src/hardware/mod.rs +++ b/src/hardware/mod.rs @@ -77,7 +77,7 @@ pub type EthernetPhy = hal::ethernet::phy::LAN8742A<hal::ethernet::EthernetMAC>; /// System timer (RTIC Monotonic) tick frequency pub const MONOTONIC_FREQUENCY: u32 = 1_000; -pub type Systick = systick_monotonic::Systick<MONOTONIC_FREQUENCY>; +pub type Systick = rtic_monotonics::systick::Systick; pub type SystemTimer = mono_clock::MonoClock<u32, MONOTONIC_FREQUENCY>; pub type I2c1 = hal::i2c::I2c<hal::stm32::I2C1>; diff --git a/src/hardware/setup.rs b/src/hardware/setup.rs index 2733edaaa..657ba43bc 100644 --- a/src/hardware/setup.rs +++ b/src/hardware/setup.rs @@ -108,7 +108,6 @@ pub struct EemGpioDevices { /// The available hardware interfaces on Stabilizer. pub struct StabilizerDevices { - pub systick: Systick, pub temperature_sensor: CpuTempSensor, pub afes: (AFE0, AFE1), pub adcs: (adc::Adc0Input, adc::Adc1Input), @@ -293,7 +292,8 @@ pub fn setup( // Before being able to call any code in ITCM, load that code from flash. load_itcm(); - let systick = Systick::new(core.SYST, ccdr.clocks.sysclk().to_Hz()); + let mono_token = rtic_monotonics::create_systick_token!(); + Systick::start(core.SYST, ccdr.clocks.sysclk().to_Hz(), mono_token); // After ITCM loading. core.SCB.enable_icache(); @@ -1129,7 +1129,6 @@ pub fn setup( }; let stabilizer = StabilizerDevices { - systick, afes, adcs, dacs, From 98726861288f2f09e26494af1f633565bfe89a16 Mon Sep 17 00:00:00 2001 From: Ryan Summers <ryan.summers@vertigo-designs.com> Date: Thu, 7 Mar 2024 09:25:51 +0100 Subject: [PATCH 2/2] Updating to RTIC 2.1 to avoid nightly toolchain --- Cargo.lock | 174 +++++++++++++++++++++++++++++++------------- Cargo.toml | 2 +- src/bin/dual-iir.rs | 1 - src/bin/lockin.rs | 1 - 4 files changed, 123 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index def9d3934..cff252bfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,7 +9,7 @@ dependencies = [ "bit_field", "bitflags 2.4.2", "bytemuck", - "embedded-hal", + "embedded-hal 0.2.7", ] [[package]] @@ -173,7 +173,7 @@ dependencies = [ "bare-metal 0.2.5", "bitfield", "critical-section", - "embedded-hal", + "embedded-hal 0.2.7", "volatile-register", ] @@ -197,34 +197,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "cortex-m-rtic" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d696ae7390bdb9f7978f71ca7144256a2c4616240a6df9002da3c451f9fc8f02" -dependencies = [ - "bare-metal 1.0.0", - "cortex-m 0.7.7", - "cortex-m-rtic-macros", - "heapless 0.7.17", - "rtic-core", - "rtic-monotonic", - "version_check", -] - -[[package]] -name = "cortex-m-rtic-macros" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eefb40b1ca901c759d29526e5c8a0a1b246c20caaa5b4cc5d0f0b94debecd4c7" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "rtic-syntax", - "syn 1.0.109", -] - [[package]] name = "critical-section" version = "1.1.2" @@ -250,6 +222,12 @@ dependencies = [ "void", ] +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + [[package]] name = "embedded-io" version = "0.6.1" @@ -302,6 +280,12 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -320,6 +304,30 @@ dependencies = [ "gcd", ] +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "gcd" version = "2.3.0" @@ -387,9 +395,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heapless" @@ -438,11 +446,11 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ - "autocfg", + "equivalent", "hashbrown", ] @@ -503,7 +511,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f05acdc7a7d6da7b9be48c2d1de2f9757d37d3a83564aa82b4ae6d7ad15d0db6" dependencies = [ - "embedded-hal", + "embedded-hal 0.2.7", ] [[package]] @@ -535,7 +543,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c5a338372c83c3eff68c07a23fe00dff2b2c9195583a2d464292919bc27de04" dependencies = [ "bit_field", - "embedded-hal", + "embedded-hal 0.2.7", "num_enum 0.5.11", "paste", ] @@ -767,6 +775,18 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.28" @@ -847,12 +867,48 @@ dependencies = [ "rand_core", ] +[[package]] +name = "rtic" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9472edf226fafcaec0af8afeac6d22b28bf4fdbe7c34762b82af540c081f9a" +dependencies = [ + "atomic-polyfill 1.0.3", + "bare-metal 1.0.0", + "cortex-m 0.7.7", + "critical-section", + "rtic-core", + "rtic-macros", +] + +[[package]] +name = "rtic-common" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0786b50b81ef9d2a944a000f60405bb28bf30cd45da2d182f3fe636b2321f35c" +dependencies = [ + "critical-section", +] + [[package]] name = "rtic-core" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9369355b04d06a3780ec0f51ea2d225624db777acbc60abd8ca4832da5c1a42" +[[package]] +name = "rtic-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54053598ea24b1b74937724e366558412a1777eb2680b91ef646db540982789a" +dependencies = [ + "indexmap", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "rtic-monotonic" version = "1.0.0" @@ -860,15 +916,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb8b0b822d1a366470b9cea83a1d4e788392db763539dc4ba022bcc787fece82" [[package]] -name = "rtic-syntax" -version = "1.0.3" +name = "rtic-monotonics" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5e215601dc467752c2bddc6284a622c6f3d2bab569d992adcd5ab7e4cb9478" +checksum = "058c2397dbd5bb4c5650a0e368c3920953e458805ff5097a0511b8147b3619d7" dependencies = [ - "indexmap", - "proc-macro2", - "quote", - "syn 1.0.109", + "atomic-polyfill 1.0.3", + "cfg-if", + "cortex-m 0.7.7", + "embedded-hal 1.0.0", + "fugit", + "rtic-time", +] + +[[package]] +name = "rtic-time" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b232e7aebc045cfea81cdd164bc2727a10aca9a4568d406d0a5661cdfd0f19" +dependencies = [ + "critical-section", + "futures-util", + "rtic-common", ] [[package]] @@ -1000,7 +1069,7 @@ checksum = "05f8438a40b91c8b9531c664e9680c55b92bd78cd6809a8b45b4512b1e5765f2" dependencies = [ "atomic-polyfill 0.1.11", "cortex-m 0.6.7", - "embedded-hal", + "embedded-hal 0.2.7", "nb 0.1.3", ] @@ -1012,7 +1081,7 @@ checksum = "c6b8d3f0e34309c22ca4a9a27d24fa493e31573485f3493802b75b9d706756a6" dependencies = [ "atomic-polyfill 1.0.3", "cortex-m 0.7.7", - "embedded-hal", + "embedded-hal 0.2.7", "nb 1.1.0", ] @@ -1082,8 +1151,7 @@ dependencies = [ "built", "cortex-m 0.7.7", "cortex-m-rt", - "cortex-m-rtic", - "embedded-hal", + "embedded-hal 0.2.7", "embedded-io", "embedded-storage", "enum-iterator", @@ -1103,6 +1171,8 @@ dependencies = [ "postcard", "rand_core", "rand_xorshift", + "rtic", + "rtic-monotonics", "rtt-logger", "rtt-target", "sequential-storage", @@ -1146,7 +1216,7 @@ dependencies = [ "cast", "cortex-m 0.7.7", "embedded-dma", - "embedded-hal", + "embedded-hal 0.2.7", "embedded-storage", "fugit", "nb 1.1.0", @@ -1186,7 +1256,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e948d523b316939545d8b21a48c27aef150ce25321b9f95ff7978647a806a6fe" dependencies = [ "cortex-m 0.7.7", - "embedded-hal", + "embedded-hal 0.2.7", "usb-device", "vcell", ] @@ -1209,7 +1279,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05458b00a3a73c5b64c0de8f2a5182f6d51eb1aeb54c638e585092d26fc9a971" dependencies = [ "bit_field", - "embedded-hal", + "embedded-hal 0.2.7", "num_enum 0.5.11", ] @@ -1287,7 +1357,7 @@ name = "usbd-serial" version = "0.2.0" source = "git+https://github.com/rust-embedded-community/usbd-serial?rev=096742c1c480f6f63c1a936a3c23ede7993c624d#096742c1c480f6f63c1a936a3c23ede7993c624d" dependencies = [ - "embedded-hal", + "embedded-hal 0.2.7", "embedded-io", "nb 1.1.0", "usb-device", diff --git a/Cargo.toml b/Cargo.toml index ce0d7b2f8..1ee59a0cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ rtt-target = "0.3" serde = { version = "1.0", features = ["derive"], default-features = false } serde-json-core = "0.5" heapless = { version = "0.7.16", features = ["serde"] } -rtic = { version = "2.0", features = ["thumbv7-backend"] } +rtic = { version = "2.1", features = ["thumbv7-backend"] } rtic-monotonics = { version = "1.0", features = ["cortex-m-systick"] } embedded-hal = "0.2.7" num_enum = { version = "0.7.2", default-features = false } diff --git a/src/bin/dual-iir.rs b/src/bin/dual-iir.rs index 1e86c2e0c..051479cd9 100644 --- a/src/bin/dual-iir.rs +++ b/src/bin/dual-iir.rs @@ -25,7 +25,6 @@ //! ## Livestreaming //! This application streams raw ADC and DAC data over UDP. Refer to //! [stabilizer::net::data_stream](../stabilizer/net/data_stream/index.html) for more information. -#![feature(type_alias_impl_trait)] #![no_std] #![no_main] diff --git a/src/bin/lockin.rs b/src/bin/lockin.rs index 5b85c13c2..88524f69a 100644 --- a/src/bin/lockin.rs +++ b/src/bin/lockin.rs @@ -24,7 +24,6 @@ //! ## Livestreaming //! This application streams raw ADC and DAC data over UDP. Refer to //! [stabilizer::net::data_stream](../stabilizer/net/data_stream/index.html) for more information. -#![feature(type_alias_impl_trait)] #![no_std] #![no_main]