All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
v0.5.5 - 2020-08-27
- Includes the previous soundness fix.
- Fixes wrong use of the
cortex_mcrate which can cause some projects to stop compiling.
v0.5.4 - 2020-08-26 - YANKED
- Soundness fix in RTIC, it was previously possible to get the
cortex_m::Peripheralsmore than once, causing UB.
v0.5.3 - 2020-06-12
- Added migration guide from
cortex-m-rtfmtocortex-m-rtic - No code changes, only a version compatibility release with
cortex-m-rtfmto ease the transition for users.
v0.5.2 - 2020-06-11
- Using safe
DWTinterface - Using GitHub Actions now
- Improved CI speed
- Now
maincan be used as function name - Fixed so one can
cfg-out resources when using a newer compiler
v0.5.1 - 2019-11-19
-
Fixed arithmetic wrapping bug in src/cyccntr.rs elapsed and duration could cause an internal overflow trap on subtraction in debug mode.
-
Fixed bug in SysTick implementation where the SysTick could be disabled by accident
v0.5.0 - 2019-11-14
- Experimental support for homogeneous and heterogeneous multi-core
microcontrollers has been added. Support is gated behind the
homogeneousandheterogeneousCargo features.
- [breaking-change][] RFC 155 "explicit
Contextparameter" has been implemented.
- [breaking-change][] RFC 147 "all functions must be safe" has been implemented.
-
All the queues internally used by the framework now use
AtomicU8indices instead ofAtomicUsize; this reduces the static memory used by the framework. -
[breaking-change][] when the
capacityargument is omitted, the capacity of the task is assumed to be1. Before, a reasonable (but hard to predict) capacity was computed based on the number ofspawnreferences the task had. -
[breaking-change][] resources that are appear as exclusive references (
&mut-) no longer appear behind theExclusivenewtype. -
[breaking-change][] the
timer-queueCargo feature has been removed. ThescheduleAPI can be used without enabling any Cargo feature. -
[breaking-change][] when the
scheduleAPI is used the type ofinit::Context.corechanges fromcortex_m::Peripheralstortic::Peripherals. The fields ofrtic::Peripheralsdo not change when Cargo features are enabled. -
[breaking-change][] the monotonic timer used to implement the
scheduleAPI is now user configurable via the#[app(monotonic = ..)]argument. IMPORTANT: it is now the responsibility of the application author to configure and initialize the chosenmonotonictimer during the#[init]phase. -
[breaking-change][] the
peripheralsfield is not include ininit::Contextby default. One must opt-in using the#[app(peripherals = ..)]argument. -
[breaking-change][] the
#[exception]and#[interrupt]attributes have been removed. Hardware tasks are now declared using the#[task(binds = ..)]attribute. -
[breaking-change][] the syntax to declare resources has changed. Instead of using a
static [mut]variable for each resource, all resources must be declared in aResourcesstructure.
-
[breaking-change] the integration with the
owned_singletoncrate has been removed. You can useheapless::Poolinstead ofalloc_singleton. -
[breaking-change] late resources can no longer be initialized using the assign syntax.
init::LateResourcesis the only method to initialize late resources. See PR #140 for more details.
v0.4.3 - 2019-04-21
- Checking that the specified priorities are supported by the target device is now done at compile time.
- Building this crate with the "nightly" feature and a recent compiler has been fixed.
v0.4.2 - 2019-02-27
-
Durationnow has anas_cyclesmethod to get the number of clock cycles contained in it. -
An opt-in "nightly" feature that reduces static memory usage, shortens initialization time and reduces runtime overhead has been added. To use this feature you need a nightly compiler!
-
RFC 128 has been implemented. The
exceptionandinterrupthave gained abindsargument that lets you give the handler an arbitrary name. For example:
// on v0.4.1 you had to write
#[interrupt]
fn USART0() { .. }
// on v0.4.2 you can write
#[interrupt(binds = USART0)]
fn on_new_frame() { .. }- Builds are now reproducible.
cargo build; cargo clean; cargo buildwill produce binaries that are exactly the same (afterobjcopy -O ihex). This wasn't the case before because we used randomly generated identifiers for memory safety but now all the randomness is gone.
-
Fixed a
non_camel_case_typeswarning that showed up when using a recent nightly. -
Fixed a bug that allowed you to enter the
capacityandpriorityarguments in thetaskattribute more than once. Now all arguments can only be stated once in the list, as it should be.
v0.4.1 - 2019-02-12
-
The RTIC book has been translated to Russian. You can find the translation online at https://japaric.github.io/cortex-m-rtic/book/ru/
-
Durationnow implements theDefaulttrait.
-
[breaking-change][] [soundness-fix]
initcan not contain any early return as that would result in late resources not being initialized and thus undefined behavior. -
Use an absolute link to the book so it works when landing from crates.io documentation page
-
The initialization function can now be written as
fn init() -> init::LateResourceswhen late resources are used. This is preferred over the oldfn init()form. See the section on late resources (resources chapter) in the book for more details.
#[interrupt]and#[exception]no longer produce warnings on recent nightlies.
v0.4.0 - 2018-11-03 - YANKED
Yanked due to a soundness issue in init; the issue has been mostly fixed in v0.4.1.
-
This crate now compiles on stable 1.31.
-
[breaking-change] The
app!macro has been transformed into an attribute. See the documentation for details. -
[breaking-change] Applications that use this library must be written using the 2018 edition.
-
[breaking-change] The
Resourcetrait has been renamed toMutex.Resource.claim_muthas been renamed toMutex.lockand its signature has changed (noThresholdtoken is required). -
[breaking-change] The name of the library has changed to
rtic. The package name is stillcortex-m-rtic. -
[breaking-change]
cortex_m_rtic::set_pendinghas been renamed tortic::pend.
-
Software tasks, which can be immediately spawn and scheduled to run in the future.
-
InstantandDurationAPI. -
Integration with the
Singletonabstraction.
-
[breaking-change] The
Thresholdtoken has been removed. -
[breaking-change] The
bkptandwfire-exports have been removed. -
[breaking-change]
rtic::atomichas been removed.
v0.3.4 - 2018-08-27
- The documentation link to point to GH pages.
v0.3.3 - 2018-08-24
- Compilation with latest nightly
v0.3.2 - 2018-04-16
- Span information to error messages
- Some non fatal error messages have become warning messages. For example, specifying an empty list of resources now produces a warning instead of a hard error.
v0.3.1 - 2018-01-16
- Documentation link
v0.3.0 - 2018-01-15
- [feat]
&'static mutreferences can be safely created by assigning resources toinit. See theinit.resourcessection of theapp!macro documentation and thesafe-static-mut-refexample for details.
-
[breaking-change] svd2rust dependency has been bumped to v0.12.0
-
[breaking-change] resources assigned to tasks, or to idle, that were not declared in the top
resourcesfield generate compiler errors. Before these were assumed to be peripherals, that's no longer the case. -
[breaking-change] the layout of
init::Peripheralshas changed. This struct now has two fields:coreanddevice. The value of thecorefield is a struct that owns all the core peripherals of the device and the value of thedevicefield is a struct that owns all the device specific peripherals of the device.
v0.2.2 - 2017-11-22
- Support for runtime initialized resources ("late" resources).
v0.2.1 - 2017-07-29
- Link to
app!macro documentation.
v0.2.0 - 2017-07-29
-
The
app!macro, a macro to declare the tasks and resources of an application. -
The
Resourcetrait, which is used to write generic code that deals with resources. -
Support for system handlers like SYS_TICK.
-
[breaking-change] The signature of the
atomicfunction has changed. -
[breaking-change] The threshold token has become a concrete type and lost its
raisemethod.
-
[breaking-change] The
tasks!andperipherals!macros. -
[breaking-change] The ceiling and priority tokens.
-
[breaking-change] The
Local,ResourceandPeripheralstructs. -
[breaking-change] The traits related to type level integers.
v0.1.1 - 2017-06-05
peripherals!: Theregister_blockfield is now optional
- Initial release