10 KiB
Change Log
All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
Unreleased
v0.5.2 - 2020-06-11
- Using safe
DWT
interface - Using GitHub Actions now
- Improved CI speed
- Now
main
can 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
Added
- Experimental support for homogeneous and heterogeneous multi-core
microcontrollers has been added. Support is gated behind the
homogeneous
andheterogeneous
Cargo features.
Changed
- [breaking-change][] RFC 155 "explicit
Context
parameter" 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
AtomicU8
indices instead ofAtomicUsize
; this reduces the static memory used by the framework. -
[breaking-change][] when the
capacity
argument 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 ofspawn
references the task had. -
[breaking-change][] resources that are appear as exclusive references (
&mut-
) no longer appear behind theExclusive
newtype. -
[breaking-change][] the
timer-queue
Cargo feature has been removed. Theschedule
API can be used without enabling any Cargo feature. -
[breaking-change][] when the
schedule
API is used the type ofinit::Context.core
changes fromcortex_m::Peripherals
tortfm::Peripherals
. The fields ofrtfm::Peripherals
do not change when Cargo features are enabled. -
[breaking-change][] the monotonic timer used to implement the
schedule
API is now user configurable via the#[app(monotonic = ..)]
argument. IMPORTANT: it is now the responsibility of the application author to configure and initialize the chosenmonotonic
timer during the#[init]
phase. -
[breaking-change][] the
peripherals
field is not include ininit::Context
by 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 aResources
structure.
Removed
-
[breaking-change] the integration with the
owned_singleton
crate has been removed. You can useheapless::Pool
instead ofalloc_singleton
. -
[breaking-change] late resources can no longer be initialized using the assign syntax.
init::LateResources
is the only method to initialize late resources. See PR #140 for more details.
v0.4.3 - 2019-04-21
Changed
- Checking that the specified priorities are supported by the target device is now done at compile time.
Fixed
- Building this crate with the "nightly" feature and a recent compiler has been fixed.
v0.4.2 - 2019-02-27
Added
-
Duration
now has anas_cycles
method 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
exception
andinterrupt
have gained abinds
argument 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() { .. }
Changed
- Builds are now reproducible.
cargo build; cargo clean; cargo build
will 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
-
Fixed a
non_camel_case_types
warning that showed up when using a recent nightly. -
Fixed a bug that allowed you to enter the
capacity
andpriority
arguments in thetask
attribute more than once. Now all arguments can only be stated once in the list, as it should be.
v0.4.1 - 2019-02-12
Added
-
The RTFM book has been translated to Russian. You can find the translation online at https://japaric.github.io/cortex-m-rtfm/book/ru/
-
Duration
now implements theDefault
trait.
Changed
-
[breaking-change][] [soundness-fix]
init
can 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::LateResources
when 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.
Fixed
#[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.
Changed
-
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
Resource
trait has been renamed toMutex
.Resource.claim_mut
has been renamed toMutex.lock
and its signature has changed (noThreshold
token is required). -
[breaking-change] The name of the library has changed to
rtfm
. The package name is stillcortex-m-rtfm
. -
[breaking-change]
cortex_m_rtfm::set_pending
has been renamed tortfm::pend
.
Added
-
Software tasks, which can be immediately spawn and scheduled to run in the future.
-
Instant
andDuration
API. -
Integration with the
Singleton
abstraction.
Removed
-
[breaking-change] The
Threshold
token has been removed. -
[breaking-change] The
bkpt
andwfi
re-exports have been removed. -
[breaking-change]
rtfm::atomic
has been removed.
v0.3.4 - 2018-08-27
Changed
- The documentation link to point to GH pages.
v0.3.3 - 2018-08-24
Fixed
- Compilation with latest nightly
v0.3.2 - 2018-04-16
Added
- Span information to error messages
Changed
- 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
Fixed
- Documentation link
v0.3.0 - 2018-01-15
Added
- [feat]
&'static mut
references can be safely created by assigning resources toinit
. See theinit.resources
section of theapp!
macro documentation and thesafe-static-mut-ref
example for details.
Changed
-
[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
resources
field generate compiler errors. Before these were assumed to be peripherals, that's no longer the case. -
[breaking-change] the layout of
init::Peripherals
has changed. This struct now has two fields:core
anddevice
. The value of thecore
field is a struct that owns all the core peripherals of the device and the value of thedevice
field is a struct that owns all the device specific peripherals of the device.
v0.2.2 - 2017-11-22
Added
- Support for runtime initialized resources ("late" resources).
v0.2.1 - 2017-07-29
Fixed
- Link to
app!
macro documentation.
v0.2.0 - 2017-07-29
Added
-
The
app!
macro, a macro to declare the tasks and resources of an application. -
The
Resource
trait, which is used to write generic code that deals with resources. -
Support for system handlers like SYS_TICK.
Changed
-
[breaking-change] The signature of the
atomic
function has changed. -
[breaking-change] The threshold token has become a concrete type and lost its
raise
method.
Removed
-
[breaking-change] The
tasks!
andperipherals!
macros. -
[breaking-change] The ceiling and priority tokens.
-
[breaking-change] The
Local
,Resource
andPeripheral
structs. -
[breaking-change] The traits related to type level integers.
v0.1.1 - 2017-06-05
Changed
peripherals!
: Theregister_block
field is now optional
v0.1.0 - 2017-05-09
- Initial release