* Atomics: Replace polyfill with portable-atomic * Update Cargo.lock for examples * RTIC: portable-atomic: Update changelog * rtic-monotonics: portable-atomic: Update changelog * lm3s6965: enable critical-section when testing * xtask: Enable portable-atomic/critical-section When dealing with rtic-monotonics * rtic-monotonics: portable-atomics: Do not disable the ability to fallback --------- Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
20 KiB
Change Log
All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
For each category, Added, Changed, Fixed add new entries at the top!
Unreleased
Changed
- Updated esp32c3 dependency to v0.22.0
- Use
riscv-slicfromcrates.io - Replace
atomic-polyfillwithportable-atomic - Remove unused dependency
rtic-monotonics
[v2.1.1] - 2024-03-13
Fixed
- Soundness fix:
thumbv6was subject to race in source mask.
[v2.1.0] - 2024-02-27
Added
- Unstable support for RISC-V targets compatible with
riscv-slic - Unstable support for ESP32-C3
Fixed
- Soundness fix:
thumbv7was subject to priority inversion. - Soundness fix: Monotonics did not wait long enough in
Durationbased delays. This is not directly a change forrtic, but required bumping the minimal version ofrtic-monotonics.
Changed
- RTIC v2 now works on stable.
v2.0.1 - 2023-07-25
Added
- Allow
#[init]and#[idle]to be defined externally
Fixed
- Support new TAIT syntax requirement.
Changed
cortex-mset as an optional dependency- Moved
cortex-m-related utilities fromrtic/lib.rstortic/export.rs - Make async task priorities start at 0, instead of 1, to always start at the lowest priority
v2.0.0 - 2023-05-31
- v2 is a massive change, refer to the book for more details
v1.1.4 - 2023-02-26
Added
- CFG: Support #[cfg] on HW task, cleanup for SW tasks
- CFG: Slightly improved support for #[cfg] on Monotonics
- CI: Check examples also for thumbv8.{base,main}
- Allow custom
link_sectionattributes for late resources
Fixed
- Attempt to handle docs generation enabling
deny(missing_docs) - Book: Editorial review
- Use native GHA rustup and cargo
- Distinguish between thumbv8m.base and thumbv8m.main for basepri usage.
Changed
- Updated dev-dependency cortex-m-semihosting to v0.5
- CI: Updated to setup-python@v4
- CI: Updated to checkout@v3
- Tuned redirect message for rtic.rs/meeting
v1.1.3 - 2022-06-23
Added
Fixed
- Bump cortex-m-rtic-macros to 1.1.5
- fix ci: use SYST::PTR
cortex-m-rtic-macros v1.1.5 - 2022-06-23
- Bump rtic-syntax to 1.0.2
cortex-m-rtic-macros v1.1.4 - 2022-05-24
- Fix macros to Rust 2021
cortex-m-rtic-macros v1.1.3 - 2022-05-24
- Fix clash with defmt
Changed
v1.1.2 - 2022-05-09
Added
Fixed
- Generation of masks for the source masking scheduling for thumbv6
Changed
v1.1.1 - 2022-04-13 - YANKED
Added
Fixed
- Fixed
marcroversion
Changed
v1.1.0 - 2022-04-13 - YANKED
Added
- Improve how CHANGELOG.md merges are handled
- If current $stable and master version matches, dev-book redirects to $stable book
- During deploy stage, merge master branch into current stable IFF cargo package version matches
- Rework branch structure, release/vVERSION
- Cargo clippy in CI
- Use rust-cache Github Action
- Support for NVIC based SPR based scheduling for armv6m.
- CI changelog entry enforcer
examples/periodic-at.rs, an example of a periodic timer without accumulated drift.examples/periodic-at2.rs, an example of a periodic process with two tasks, with offset timing. Here we depict two alternative usages of the timer type, explicit and trait based.- book: Update
Monotonictips.
Fixed
- Re-export
rtic_core::preludeasrtic::mutex::preludeto allow glob imports + Clippy - Fix all except
must_uselints from clippy::pedantic - Fix dated migration docs for spawn
- Remove obsolete action-rs tool-cache
- Force mdBook to return error codes
- Readded missing ramfunc output to book
Changed
- Try to detect
target-dirfor rtic-expansion.rs
v1.0.0 - 2021-12-25
Changed
- Bump RTIC dependencies also updated to v1.0.0
- Edition 2021
- Change default
idlebehaviour to beNOPinstead ofWFI
v0.6.0-rc.4 - 2021-11-09
- Updated to use the new generic
Monotonictrait
v0.6.0-rc.3 - 2021-11-08
Fixed
- Match rtic-syntax Analysis-struct updates from https://github.com/rtic-rs/rtic-syntax/pull/61
v0.6.0-rc.2 - 2021-09-28
- Fixed issue with
cortex_mbeing used by the codegen instead of using thertic::export::...which could make an app not compile if Systick is used and the user did not have the cortex-m crate as a dependency
v0.6.0-rc.1 - 2021-09-27
- Documentation updates
- Monotonic handlers default to maximum priority instead of minimum (to follow RTIC 0.5)
- Better support for
rust-analyzer
v0.5.9 - 2021-09-27
- Removed the
cortex-m-rtdependency - Docs updates
v0.5.8 - 2021-08-19
- Feature flag was added to support
cortex-m v0.7.x - MSRV raised to 1.38.
v0.6.0-alpha.5 - 2021-07-09
Changed
- The new resources syntax is implemented.
v0.5.7 - 2021-07-05
- Backport: "you must enable the rt feature" compile time detection
v0.6.0-alpha.4 - 2021-05-27
Fixed
- Fixed codegen structure to not have issues with local paths
- Default paths for monotonics now work properly
- New
embedded-timeversion to0.11
v0.6.0-alpha.3 - 2021-0X-XX
- Lost in the ether...
v0.6.0-alpha.2 - 2021-04-08
Added
- Cancel and reschedule support to the monotonics
Fixed
- UB in
spawn_at #[cfg]and other attributes now work on hardware tasks- Type aliases now work in
mod app
Changed
- The access to monotonic static methods was for example
MyMono::now(), and is nowmonotonics::MyMono::now()
v0.6.0-alpha.1 - 2021-03-04
Added
- Support for multi-locks, see
examples/multilock.rsfor syntax. - New monotonic syntax and support, see
#[monotonic]
v0.5.6 - 2021-03-03
- Security Use latest security patched heapless
v0.6.0-alpha.0 - 2020-11-14
Added
-
Allow annotating resources to activate special resource locking behaviour.
#[lock_free], there might be several tasks with the same priority accessing the resource without critical section.#[task_local], there must be only one task, similar to a task local resource, but (optionally) set-up by init. This is similar to move.
-
Improved ergonomics allowing separation of task signatures to actual implementation in extern block
extern "Rust" { #[task(..)] fn t(..); }.
Changed
- [breaking-change] PR 400 Move dispatchers from extern block to app argument.
- [breaking-change] PR 399 Locking resources are now always required to achieve a symmetric UI.
- [breaking-change] PR 390 Rework whole spawn/schedule, support
foo::spawn( ... ),foo::schedule( ... ).
-
[breaking-change] PR 368
struct Resourceschanged to attribute#[resources]on a struct. -
[breaking-change] PR 368 Mod over const, instead of
const APP: () = {usemod app {. -
[breaking-change] PR 372 Init function always return
LateResourcesfor a symmetric API. -
PR 355 Multi-core support was removed to reduce overall complexity.
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
Added
- Experimental support for homogeneous and heterogeneous multi-core
microcontrollers has been added. Support is gated behind the
homogeneousandheterogeneousCargo features.
Changed
- [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.
Removed
-
[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
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
-
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() { .. }
Changed
- 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
-
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
Added
-
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.
Changed
-
[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.
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
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.
Added
-
Software tasks, which can be immediately spawn and scheduled to run in the future.
-
InstantandDurationAPI. -
Integration with the
Singletonabstraction.
Removed
-
[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
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 mutreferences can be safely created by assigning resources toinit. See theinit.resourcessection of theapp!macro documentation and thesafe-static-mut-refexample 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
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
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
Resourcetrait, 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
atomicfunction has changed. -
[breaking-change] The threshold token has become a concrete type and lost its
raisemethod.
Removed
-
[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
Changed
peripherals!: Theregister_blockfield is now optional
v0.1.0 - 2017-05-09
- Initial release