Skip to content

Commit 20339db

Browse files
committed
Use embedded-test for tests which allows getting rid of using steal()
1 parent f7675d7 commit 20339db

File tree

7 files changed

+36
-27
lines changed

7 files changed

+36
-27
lines changed

.cargo/config.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
[target.thumbv7em-none-eabihf]
22
runner = 'probe-rs run --connect-under-reset'
3-
rustflags = [
4-
"-C", "link-arg=-Tlink.x",
5-
"-C", "link-arg=-Tdefmt.x",
6-
]
73

84
[build]
95
target = "thumbv7em-none-eabihf"

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ optional = true
5555
[dev-dependencies]
5656
cortex-m-rt = "0.7.2"
5757
defmt-rtt = "0.4.0"
58-
defmt-test = "0.3.2"
58+
embedded-test = "0.6.1"
5959
cortex-m-rtic = "1.1.4"
6060
cortex-m-semihosting = "0.3.5"
6161
panic-probe = { version = "0.3.0", features = ["print-defmt"] }
@@ -104,6 +104,7 @@ defmt = [
104104
"nb/defmt-0-3",
105105
"embedded-hal/defmt-03",
106106
"embedded-io/defmt-03",
107+
"embedded-test/defmt",
107108
]
108109
cordic = ["dep:fixed"]
109110
adc3 = []

build.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use std::env;
2+
3+
fn main() {
4+
// stm32 specific
5+
println!("cargo:rustc-link-arg=-Tlink.x");
6+
7+
// add linker script for embedded-test!!
8+
println!("cargo::rustc-link-arg-tests=-Tembedded-test.x");
9+
10+
// Check if the `defmt` feature is enabled, and if so link its linker script
11+
if env::var("CARGO_FEATURE_DEFMT").is_ok() {
12+
println!("cargo:rustc-link-arg=-Tdefmt.x");
13+
}
14+
}

examples/utils/logger.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ cfg_if::cfg_if! {
1212

1313
cfg_if::cfg_if! {
1414
if #[cfg(feature = "log-itm")] {
15+
#[cfg(not(test))]
1516
use panic_itm as _;
1617

1718
use lazy_static::lazy_static;
@@ -57,6 +58,7 @@ cfg_if::cfg_if! {
5758
}
5859
else if #[cfg(feature = "defmt")] {
5960
use defmt_rtt as _; // global logger
61+
#[cfg(not(test))]
6062
use panic_probe as _;
6163
#[allow(unused_imports)]
6264
pub use defmt::Logger;
@@ -67,6 +69,7 @@ cfg_if::cfg_if! {
6769
pub fn init() {}
6870
}
6971
else if #[cfg(feature = "log-semihost")] {
72+
#[cfg(not(test))]
7073
use panic_semihosting as _;
7174

7275
use lazy_static::lazy_static;
@@ -104,6 +107,7 @@ cfg_if::cfg_if! {
104107
}
105108
}
106109
else {
110+
#[cfg(not(test))]
107111
use panic_halt as _;
108112

109113
#[allow(dead_code)]

tests/common/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ impl<const CYCLES_PER_US: u32> Timer<CYCLES_PER_US> {
2121

2222
#[allow(dead_code)]
2323
pub fn is_pax_low(pin: u8) -> bool {
24-
let gpioa = unsafe { &*GPIOA::PTR };
24+
let gpioa = unsafe { &*stm32::GPIOA::PTR };
2525
gpioa.idr().read().idr(pin).is_low()
2626
}
2727

tests/nucleo-g474.rs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use stm32g4xx_hal as hal;
1616
pub const F_SYS: HertzU32 = HertzU32::MHz(16);
1717
pub const CYCLES_PER_US: u32 = F_SYS.raw() / 1_000_000;
1818

19-
#[defmt_test::tests]
19+
#[embedded_test::tests]
2020
mod tests {
2121
use embedded_hal::pwm::SetDutyCycle;
2222
use fixed::types::I1F15;
@@ -45,9 +45,8 @@ mod tests {
4545
fn gpio_push_pull() {
4646
use super::*;
4747

48-
// TODO: Is it ok to steal these?
49-
let cp = unsafe { stm32::CorePeripherals::steal() };
50-
let dp = unsafe { stm32::Peripherals::steal() };
48+
let cp = stm32::CorePeripherals::take().unwrap();
49+
let dp = stm32::Peripherals::take().unwrap();
5150
let mut rcc = dp.RCC.constrain();
5251
let mut delay = cp.SYST.delay(&rcc.clocks);
5352
defmt::dbg!(rcc.clocks.sys_clk);
@@ -70,9 +69,8 @@ mod tests {
7069
fn gpio_open_drain() {
7170
use super::*;
7271

73-
// TODO: Is it ok to steal these?
74-
let cp = unsafe { stm32::CorePeripherals::steal() };
75-
let dp = unsafe { stm32::Peripherals::steal() };
72+
let cp = stm32::CorePeripherals::take().unwrap();
73+
let dp = stm32::Peripherals::take().unwrap();
7674
let mut rcc = dp.RCC.constrain();
7775
let mut delay = cp.SYST.delay(&rcc.clocks);
7876

@@ -102,9 +100,8 @@ mod tests {
102100
fn pwm() {
103101
use super::*;
104102

105-
// TODO: Is it ok to steal these?
106-
let mut cp = unsafe { stm32::CorePeripherals::steal() };
107-
let dp = unsafe { stm32::Peripherals::steal() };
103+
let mut cp = stm32::CorePeripherals::take().unwrap();
104+
let dp = stm32::Peripherals::take().unwrap();
108105
let timer = Timer::enable_timer(&mut cp);
109106

110107
let mut rcc = dp.RCC.constrain();
@@ -171,7 +168,7 @@ mod tests {
171168

172169
use super::*;
173170

174-
let dp = unsafe { stm32::Peripherals::steal() };
171+
let dp = stm32::Peripherals::take().unwrap();
175172
let mut rcc = dp.RCC.constrain();
176173

177174
let mut cordic = dp
@@ -205,9 +202,8 @@ mod tests {
205202
fn adc() {
206203
use super::*;
207204

208-
// TODO: Is it ok to steal these?
209-
let cp = unsafe { stm32::CorePeripherals::steal() };
210-
let dp = unsafe { stm32::Peripherals::steal() };
205+
let cp = stm32::CorePeripherals::take().unwrap();
206+
let dp = stm32::Peripherals::take().unwrap();
211207
let mut rcc = dp.RCC.constrain();
212208
let mut delay = cp.SYST.delay(&rcc.clocks);
213209

@@ -246,9 +242,8 @@ mod tests {
246242
dma::{channel::DMAExt, config::DmaConfig, TransferExt},
247243
};
248244

249-
// TODO: Is it ok to steal these?
250-
let cp = unsafe { stm32::CorePeripherals::steal() };
251-
let dp = unsafe { stm32::Peripherals::steal() };
245+
let cp = stm32::CorePeripherals::take().unwrap();
246+
let dp = stm32::Peripherals::take().unwrap();
252247
let mut rcc = dp.RCC.constrain();
253248
let mut delay = cp.SYST.delay(&rcc.clocks);
254249

tests/nucleo-g474_w_jumpers.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use stm32g4xx_hal::rcc::{self, RccExt};
1919
use hal::stm32;
2020
use stm32g4xx_hal as hal;
2121

22-
#[defmt_test::tests]
22+
#[embedded_test::tests]
2323
mod tests {
2424
use embedded_hal::delay::DelayNs;
2525
use stm32g4xx_hal::{
@@ -311,9 +311,8 @@ fn setup_opamp_comp_dac() -> Peripherals {
311311
//op1+ PA1 -> A1
312312
//DAC1_OUT1 PA4 -> A2
313313

314-
// TODO: Is it ok to steal these?
315-
let cp = unsafe { stm32::CorePeripherals::steal() };
316-
let dp = unsafe { stm32::Peripherals::steal() };
314+
let cp = stm32::CorePeripherals::take().unwrap();
315+
let dp = stm32::Peripherals::take().unwrap();
317316
let mut rcc = dp.RCC.constrain();
318317
let mut delay = cp.SYST.delay(&rcc.clocks);
319318

0 commit comments

Comments
 (0)