489: Allow zero sized LinkedList r=korken89 a=jhillyerd
If one configures a monotonic in alpha4, but doesn't use it, TimerQueue attempts to create a zero-sized LinkedList, which causes an underflow.
This PR allows for zero-sized linked lists.
Co-authored-by: James Hillyerd <james@hillyerd.com>
479: book: detail import resolving for 0.6 migration r=korken89 a=tmplt
That is, answering the question of why imports are no longer resolving during compilation.
Co-authored-by: Viktor Sonesten <v@tmplt.dev>
480: book/migration/v5: update init signature, fix example syntax r=korken89 a=tmplt
From the comment in #478.
The example now migrates from v5 to v6 instead of an incorrect v6 syntax
to a another incorrect v6 syntax.
Co-authored-by: Viktor Sonesten <v@tmplt.dev>
478: book: update outdated required init signature r=korken89 a=tmplt
As per the title. The required signature of `#[init]` in the flowing text has not yet been updated for v0.6.0.
Co-authored-by: Viktor Sonesten <v@tmplt.dev>
476: reclaim stack space used in late init r=korken89 a=conorpp
Fixes#474.
Tested that there is no longer any stack overhead leftover from moving init resources.
(made mistake force pushing with last PR when trying to fix lint)
The expansion for an example with 2 buffers as resources changes from:
```rust
let (late, mut monotonics) = crate::APP::init(init::Context::new(core.into()));
__rtic_internal_mybuffer.as_mut_ptr().write(late.mybuffer);
__rtic_internal_mybuffer2.as_mut_ptr().write(late.mybuffer2);
rtic::export::interrupt::enable();
crate::APP::idle(idle::Context::new(&rtic::export::Priority::new(0)))
```
to:
```rust
#[inline(never)]
fn __rtic_init_resources<F>(f: F)
where
F: FnOnce(),
{
f();
}
__rtic_init_resources(|| {
let (late, mut monotonics) = crate::APP::init(init::Context::new(core.into()));
__rtic_internal_mybuffer.as_mut_ptr().write(late.mybuffer);
__rtic_internal_mybuffer2.as_mut_ptr().write(late.mybuffer2);
rtic::export::interrupt::enable();
});
crate::APP::idle(idle::Context::new(&rtic::export::Priority::new(0)))
```
Co-authored-by: Conor Patrick <conorpp94@gmail.com>
466: Fix for type aliases in `mod app`, UB in `spawn_at`, and `#[cfg]` in hardware tasks r=AfoHT a=korken89
Type aliases such as the following did not work in `0.6-alpha`:
```rust
use rtic::app;
#[app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
type Test = u32;
#[task]
fn t1(_: t1::Context, _val: Test) {}
}
```
Plus that accessing associated constants of monotonic timers was not working as it should dues to the syntax and codegen transforming:
```rust
#[monotonic(binds = SysTick, default = true)]
type MyMono = DwtSystick<8_000_000>; // 8 MHz
```
into
```rust
mod MyMono {
// ...
}
```
causing the original `type MyMono` to not exist anymore.
This PR fixes this and adds test to check for this by doing the following expansion instead:
```rust
#[monotonic(binds = SysTick, default = true)]
type MyMono = DwtSystick<8_000_000>; // 8 MHz
```
into
```rust
type MyMono = DwtSystick<8_000_000>;
mod monotonics {
mod MyMono {
// ...
}
// And other monotonics go here as well
}
```
**Breaking change**
This causes a breaking change in accessing the `MyMono::now()` method which now exists under `monotonics::MyMono::now()`.
---
Moreover a UB issue was found and fixed in `spawn_at` and hardware tasks properly propagate `#[cfg]`s.
Closes#460Closes#462Closes#463
Co-authored-by: Emil Fresk <emil.fresk@gmail.com>