ci: fix nrf, rp tests.

This commit is contained in:
Dario Nieuwenhuis 2023-05-29 21:30:28 +02:00
parent 642eb1400b
commit 1a31b03976
14 changed files with 98 additions and 36 deletions

4
.github/ci/test.sh vendored
View file

@ -21,7 +21,9 @@ cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly
cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly,ed25519-dalek cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly,ed25519-dalek
cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly,ed25519-salty cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly,ed25519-salty
#cargo test --manifest-path ./embassy-nrf/Cargo.toml --no-default-features --features nightly,nrf52840,time-driver-rtc1 ## broken doctests cargo test --manifest-path ./embassy-nrf/Cargo.toml --no-default-features --features nightly,nrf52840,time-driver-rtc1,gpiote
cargo test --manifest-path ./embassy-rp/Cargo.toml --no-default-features --features nightly,time-driver
cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f429vg,exti,time-driver-any,exti cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f429vg,exti,time-driver-any,exti
cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f732ze,exti,time-driver-any,exti cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f732ze,exti,time-driver-any,exti

View file

@ -17,7 +17,7 @@ target = "thumbv7em-none-eabi"
defmt = { version = "0.3", optional = true } defmt = { version = "0.3", optional = true }
embassy-sync = { path = "../../embassy-sync" } embassy-sync = { path = "../../embassy-sync" }
embassy-nrf = { path = "../../embassy-nrf", default-features = false } embassy-nrf = { path = "../../embassy-nrf" }
embassy-boot = { path = "../boot", default-features = false } embassy-boot = { path = "../boot", default-features = false }
cortex-m = { version = "0.7.6" } cortex-m = { version = "0.7.6" }
cortex-m-rt = { version = "0.7" } cortex-m-rt = { version = "0.7" }

View file

@ -16,6 +16,18 @@ flavors = [
] ]
[features] [features]
default = [
"nrf52805-pac?/rt",
"nrf52810-pac?/rt",
"nrf52811-pac?/rt",
"nrf52820-pac?/rt",
"nrf52832-pac?/rt",
"nrf52833-pac?/rt",
"nrf52840-pac?/rt",
"nrf5340-app-pac?/rt",
"nrf5340-net-pac?/rt",
"nrf9160-pac?/rt",
]
time = ["dep:embassy-time"] time = ["dep:embassy-time"]
@ -103,13 +115,14 @@ embedded-storage = "0.3.0"
embedded-storage-async = { version = "0.4.0", optional = true } embedded-storage-async = { version = "0.4.0", optional = true }
cfg-if = "1.0.0" cfg-if = "1.0.0"
nrf52805-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52805-pac = { version = "0.12.0", optional = true }
nrf52810-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52810-pac = { version = "0.12.0", optional = true }
nrf52811-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52811-pac = { version = "0.12.0", optional = true }
nrf52820-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52820-pac = { version = "0.12.0", optional = true }
nrf52832-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52832-pac = { version = "0.12.0", optional = true }
nrf52833-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52833-pac = { version = "0.12.0", optional = true }
nrf52840-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf52840-pac = { version = "0.12.0", optional = true }
nrf5340-app-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf5340-app-pac = { version = "0.12.0", optional = true }
nrf5340-net-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf5340-net-pac = { version = "0.12.0", optional = true }
nrf9160-pac = { version = "0.12.0", optional = true, features = [ "rt" ] } nrf9160-pac = { version = "0.12.0", optional = true }

View file

@ -13,7 +13,7 @@ with peripherals. It takes care of sending/receiving data over a variety of bus
However, EasyDMA requires the buffers used to transmit and receive data to reside in RAM. Unfortunately, Rust However, EasyDMA requires the buffers used to transmit and receive data to reside in RAM. Unfortunately, Rust
slices will not always do so. The following example using the SPI peripheral shows a common situation where this might happen: slices will not always do so. The following example using the SPI peripheral shows a common situation where this might happen:
```no_run ```rust,ignore
// As we pass a slice to the function whose contents will not ever change, // As we pass a slice to the function whose contents will not ever change,
// the compiler writes it into the flash and thus the pointer to it will // the compiler writes it into the flash and thus the pointer to it will
// reference static memory. Since EasyDMA requires slices to reside in RAM, // reference static memory. Since EasyDMA requires slices to reside in RAM,

View file

@ -154,10 +154,19 @@ impl<'d, T: Instance> Qdec<'d, T> {
/// # Example /// # Example
/// ///
/// ```no_run /// ```no_run
/// let irq = interrupt::take!(QDEC); /// use embassy_nrf::qdec::{self, Qdec};
/// use embassy_nrf::{bind_interrupts, peripherals};
///
/// bind_interrupts!(struct Irqs {
/// QDEC => qdec::InterruptHandler<peripherals::QDEC>;
/// });
///
/// # async {
/// # let p: embassy_nrf::Peripherals = todo!();
/// let config = qdec::Config::default(); /// let config = qdec::Config::default();
/// let mut q = Qdec::new(p.QDEC, p.P0_31, p.P0_30, config); /// let mut q = Qdec::new(p.QDEC, Irqs, p.P0_31, p.P0_30, config);
/// let delta = q.read().await; /// let delta = q.read().await;
/// # };
/// ``` /// ```
pub async fn read(&mut self) -> i16 { pub async fn read(&mut self) -> i16 {
let t = T::regs(); let t = T::regs();

View file

@ -56,8 +56,19 @@ impl<'d> Temp<'d> {
/// # Example /// # Example
/// ///
/// ```no_run /// ```no_run
/// let mut t = Temp::new(p.TEMP, interrupt::take!(TEMP)); /// use embassy_nrf::{bind_interrupts, temp};
/// use embassy_nrf::temp::Temp;
/// use embassy_time::{Duration, Timer};
///
/// bind_interrupts!(struct Irqs {
/// TEMP => temp::InterruptHandler;
/// });
///
/// # async {
/// # let p: embassy_nrf::Peripherals = todo!();
/// let mut t = Temp::new(p.TEMP, Irqs);
/// let v: u16 = t.read().await.to_num::<u16>(); /// let v: u16 = t.read().await.to_num::<u16>();
/// # };
/// ``` /// ```
pub async fn read(&mut self) -> I30F2 { pub async fn read(&mut self) -> I30F2 {
// In case the future is dropped, stop the task and reset events. // In case the future is dropped, stop the task and reset events.

View file

@ -13,6 +13,8 @@ flavors = [
] ]
[features] [features]
default = [ "rp-pac/rt" ]
defmt = ["dep:defmt", "embassy-usb-driver?/defmt", "embassy-hal-common/defmt"] defmt = ["dep:defmt", "embassy-usb-driver?/defmt", "embassy-hal-common/defmt"]
# critical section that is safe for multicore use # critical section that is safe for multicore use
@ -70,7 +72,7 @@ embedded-storage = { version = "0.3" }
rand_core = "0.6.4" rand_core = "0.6.4"
fixed = "1.23.1" fixed = "1.23.1"
rp-pac = { version = "4", features = ["rt"] } rp-pac = { version = "4" }
embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10", optional = true} embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10", optional = true}
@ -81,3 +83,7 @@ paste = "1.0"
pio-proc = {version= "0.2" } pio-proc = {version= "0.2" }
pio = {version= "0.2.1" } pio = {version= "0.2.1" }
rp2040-boot2 = "0.3" rp2040-boot2 = "0.3"
[dev-dependencies]
embassy-executor = { version = "0.2.0", path = "../embassy-executor", features = ["arch-std", "executor-thread"] }
static_cell = "1.0"

View file

@ -575,6 +575,7 @@ mod ram_helpers {
#[inline(never)] #[inline(never)]
#[link_section = ".data.ram_func"] #[link_section = ".data.ram_func"]
unsafe fn read_flash_inner(cmd: FlashCommand, ptrs: *const FlashFunctionPointers) { unsafe fn read_flash_inner(cmd: FlashCommand, ptrs: *const FlashFunctionPointers) {
#[cfg(target_arch = "arm")]
core::arch::asm!( core::arch::asm!(
"mov r10, r0", // cmd "mov r10, r0", // cmd
"mov r5, r1", // ptrs "mov r5, r1", // ptrs

View file

@ -61,16 +61,17 @@ macro_rules! intrinsics_aliases {
/// Like the compiler-builtins macro, it accepts a series of functions that /// Like the compiler-builtins macro, it accepts a series of functions that
/// looks like normal Rust code: /// looks like normal Rust code:
/// ///
/// intrinsics! { /// ```rust,ignore
/// extern "C" fn foo(a: i32) -> u32 { /// intrinsics! {
/// // ... /// extern "C" fn foo(a: i32) -> u32 {
/// } /// // ...
///
/// #[nonstandard_attribute]
/// extern "C" fn bar(a: i32) -> u32 {
/// // ...
/// }
/// } /// }
/// #[nonstandard_attribute]
/// extern "C" fn bar(a: i32) -> u32 {
/// // ...
/// }
/// }
/// ```
/// ///
/// Each function can also be decorated with nonstandard attributes to control /// Each function can also be decorated with nonstandard attributes to control
/// additional behaviour: /// additional behaviour:

View file

@ -9,22 +9,41 @@
//! the `embassy-sync` primitives and `CriticalSectionRawMutex`. //! the `embassy-sync` primitives and `CriticalSectionRawMutex`.
//! //!
//! # Usage //! # Usage
//!
//! ```no_run //! ```no_run
//! # #![feature(type_alias_impl_trait)]
//! use embassy_rp::multicore::Stack;
//! use static_cell::StaticCell;
//! use embassy_executor::Executor;
//!
//! static mut CORE1_STACK: Stack<4096> = Stack::new(); //! static mut CORE1_STACK: Stack<4096> = Stack::new();
//! static EXECUTOR0: StaticCell<Executor> = StaticCell::new(); //! static EXECUTOR0: StaticCell<Executor> = StaticCell::new();
//! static EXECUTOR1: StaticCell<Executor> = StaticCell::new(); //! static EXECUTOR1: StaticCell<Executor> = StaticCell::new();
//! //!
//! # // workaround weird error: `main` function not found in crate `rust_out`
//! # let _ = ();
//!
//! #[embassy_executor::task]
//! async fn core0_task() {
//! // ...
//! }
//!
//! #[embassy_executor::task]
//! async fn core1_task() {
//! // ...
//! }
//!
//! #[cortex_m_rt::entry] //! #[cortex_m_rt::entry]
//! fn main() -> ! { //! fn main() -> ! {
//! let p = embassy_rp::init(Default::default()); //! let p = embassy_rp::init(Default::default());
//! //!
//! spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || { //! embassy_rp::multicore::spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || {
//! let executor1 = EXECUTOR1.init(Executor::new()); //! let executor1 = EXECUTOR1.init(Executor::new());
//! executor1.run(|spawner| unwrap!(spawner.spawn(core1_task()))); //! executor1.run(|spawner| spawner.spawn(core1_task()).unwrap());
//! }); //! });
//! //!
//! let executor0 = EXECUTOR0.init(Executor::new()); //! let executor0 = EXECUTOR0.init(Executor::new());
//! executor0.run(|spawner| unwrap!(spawner.spawn(core0_task()))); //! executor0.run(|spawner| spawner.spawn(core0_task()).unwrap())
//! } //! }
//! ``` //! ```

View file

@ -121,7 +121,7 @@ impl<'d, T: Instance> RealTimeClock<'d, T> {
/// # #[cfg(not(feature = "chrono"))] /// # #[cfg(not(feature = "chrono"))]
/// # fn main() { /// # fn main() {
/// # use embassy_rp::rtc::{RealTimeClock, DateTimeFilter}; /// # use embassy_rp::rtc::{RealTimeClock, DateTimeFilter};
/// # let mut real_time_clock: RealTimeClock = unsafe { core::mem::zeroed() }; /// # let mut real_time_clock: RealTimeClock<embassy_rp::peripherals::RTC> = unsafe { core::mem::zeroed() };
/// let now = real_time_clock.now().unwrap(); /// let now = real_time_clock.now().unwrap();
/// real_time_clock.schedule_alarm( /// real_time_clock.schedule_alarm(
/// DateTimeFilter::default() /// DateTimeFilter::default()

View file

@ -9,8 +9,8 @@ license = "MIT OR Apache-2.0"
defmt = { version = "0.3", optional = true } defmt = { version = "0.3", optional = true }
defmt-rtt = { version = "0.4", optional = true } defmt-rtt = { version = "0.4", optional = true }
embassy-nrf = { path = "../../../../embassy-nrf", default-features = false, features = ["nightly"] } embassy-nrf = { path = "../../../../embassy-nrf", features = ["nightly"] }
embassy-boot-nrf = { path = "../../../../embassy-boot/nrf", default-features = false } embassy-boot-nrf = { path = "../../../../embassy-boot/nrf" }
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
cortex-m-rt = { version = "0.7" } cortex-m-rt = { version = "0.7" }
cfg-if = "1.0.0" cfg-if = "1.0.0"

View file

@ -9,8 +9,8 @@ license = "MIT OR Apache-2.0"
defmt = { version = "0.3", optional = true } defmt = { version = "0.3", optional = true }
defmt-rtt = { version = "0.4", optional = true } defmt-rtt = { version = "0.4", optional = true }
embassy-rp = { path = "../../../../embassy-rp", default-features = false, features = ["nightly"] } embassy-rp = { path = "../../../../embassy-rp", features = ["nightly"] }
embassy-boot-rp = { path = "../../../../embassy-boot/rp", default-features = false } embassy-boot-rp = { path = "../../../../embassy-boot/rp" }
embassy-time = { path = "../../../../embassy-time", features = ["nightly"] } embassy-time = { path = "../../../../embassy-time", features = ["nightly"] }
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }

View file

@ -9,8 +9,8 @@ license = "MIT OR Apache-2.0"
defmt = { version = "0.3", optional = true } defmt = { version = "0.3", optional = true }
defmt-rtt = { version = "0.4", optional = true } defmt-rtt = { version = "0.4", optional = true }
embassy-stm32 = { path = "../../../../embassy-stm32", default-features = false, features = ["nightly"] } embassy-stm32 = { path = "../../../../embassy-stm32", features = ["nightly"] }
embassy-boot-stm32 = { path = "../../../../embassy-boot/stm32", default-features = false } embassy-boot-stm32 = { path = "../../../../embassy-boot/stm32" }
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
cortex-m-rt = { version = "0.7" } cortex-m-rt = { version = "0.7" }
embedded-storage = "0.3.0" embedded-storage = "0.3.0"