Releases: r3-os/r3
r3 0.2.4
This release includes compatibility fixes for the latest nightly toolchain.
All packages
Changed
- Breaking (semver-exempt): Change the target compiler version to
nightly-2022-11-10
[email protected]
No specific changes
[email protected]
Fixed
- Remove a broken link to the rustdoc-generated Macros section in the crate documentation
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
r3 0.2.3
This release includes compatibility fixes as well as improvements enabled by the latest nightly toolchain.
All packages
Changed
- Breaking (semver-exempt): Change the target compiler version to
nightly-2022-08-11
[email protected]
Changed
- Removed trait bounds in items and item documentations that have been made redundant by the supertraits of
r3_core::kernel::traits::Cfg*
traits, which now include~const
.
[email protected]
Added
- The new blanket-implemented
CfgStatic
trait can be used to simplify some trait bounds of configuration functions. - The
Cfg*
traits now include~const
in their supertraits (rust-lang/rust#93429), making~const CfgBase
trait bound unnecessary if it's implied by others.
[email protected]
Fixed
- Fixed an unexposed soundness bug in
Timeout
's destructor in which the destructor started unwinding instead of aborting on precondition violation. This could only be triggered by a bug in internal code, and we are not aware of any instances of such bugs. Triggering the bug also requires theunwind
panic strategy, which is not supported by bare-metal targets.
[email protected]
Fixed
- Fixed a typo in an error message.
[email protected]
Changed
- Breaking:
use_rt!
is now gated behindriscv-rt
Cargo feature.
Fixed
- This crate no longer exports symbol names like
0
and1
, which are prone to name collision.
[email protected]
Fixed
- Implemented a work-around for ICE caused by mentioning a reference type in inline assembly
sym
operands (rust-lang/rust#96304).
r3 0.2.2
This release includes compatibility fixes for the latest nightly toolchain.
All packages
Changed
- Breaking (semver-exempt): Change the target compiler version to
nightly-2022-03-30
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
Changed
- Breaking (semver-exempt): The printing macros
sprint[ln]!
now treat their first argument as a format string in all cases to support implicit named arguments (Rust RFC 2795).
[email protected]
Changed
- Breaking (semver-exempt): The printing macros
sprint[ln]!
now treat their first argument as a format string in all cases to support implicit named arguments (Rust RFC 2795).
r3 0.2.1
This release is focused on fixing issues with documentation builds that were discovered after the last release.
All packages
Fixed
- Improve rustdoc theme detection on docs.rs
[email protected]
Fixed
- Upgrade
svgbobdoc
to^0.3.0
to fix build failures in documentation build
[email protected]
Fixed
- Upgrade
svgbobdoc
to^0.3.0
to fix build failures in documentation build
[email protected]
Fixed
- Upgrade
svgbobdoc
to^0.3.0
to fix build failures in documentation build
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
Fixed
- Upgrade
svgbobdoc
to^0.3.0
to fix build failures in documentation build
[email protected]
No specific changes
[email protected]
Fixed
- Upgrade
svgbobdoc
to^0.3.0
to fix build failures in documentation build
[email protected]
No specific changes
[email protected]
No specific changes
r3 0.2.0
The overall design has been revamped! The original kernel implementation has been moved to a separate crate r3_kernel
. r3_core
harbors the interface definition for a kernel implementation, and r3
provides additional useful items, such as a mutex-backed cell type (StaticMutex
). Different kernel implementations that use more exotic architectures (such as interrupt-driven multi-threading) or are built on top on existing RTOSes may be added in the future.
All packages
Changed
- Breaking (semver-exempt): Change the target compiler version to
nightly-2022-03-10
[email protected]
Changed
While much of the application-level API has retained its general shape, there are some significant changes that may require attention:
- Introduces object safety. All kernel object handle types now have the following variations:
Mutex<_>
(owned),MutexRef<'_, _>
(borrowed),StaticMutex
(static). Owned handles aren't usable yet. - The way of instantiating a kernel and defining a system type has changed. The port-provided macro (
use_port!
) now defines a kernel trait type (SystemTraits: r3_kernel::KernelTraits
), which is then used as a generic parameter to create a concrete system type (type System = r3_kernel::System<SystemTraits>
). Please see the package documentation (README.md
) for an example. r3::kernel::Task::current
was moved tor3::kernel::LocalTask::current
and now requires a task context. It returnsLocalTask
, which cannot be sent to another thread but whose reference (&LocalTask
orTaskRef
) can be.r3::kernel::ResultCode::BadId
was renamed toNoAccess
and covers general protection failures detected by a now-optional protection mechanism. This means that application and library code can't rely onNoAccess
being returned reliably anymore (it can't anyway once owned handles are implemented), and that a kernel implementation may use this error code to indicate that a given kernel object ID might be valid, but the caller lacks the necessary privileges to access that object.- The
chrono
Cargo feature was renamed tochrono_0p4
. r3::sync
is now gated bycfg(feature = "sync")
.r3::sync::{Mutex, RecursiveMutex}
is now backed by bindings (Bind
). The default value is now<T as Default>::default()
instead of<T as Init>::INIT
. Additional options are available, which means you no longer have to implementInit
just to put a custom type inMutex
, and that eachMutex
can have a distinct initial value.
Added
- Bindings (
Bind
), a static storage with runtime initialization and configuration-time borrow checking. They can be used, for example, to provide a task or timer callback with a state data storage that can be mutably borrowed and persists across invocations. Kernel::{is_task_context, is_interrupt_context, is_boot_complete}
Fixed
- The hard-coded kernel object count limitation has been removed. This was made possible by the use of growable arrays in the compile-time kernel configurator.
[email protected]
Initial release.
[email protected]
Initial release. Supports r3_core ^0.1
.
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_kernel ^0.1
. - Breaking:
sym_static!
was redesigned to address multiple issues.
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_kernel ^0.1
.
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_kernel ^0.1
.
Fixed
- The default stack alignment (
PortThreading::STACK_ALIGN
) now conforms to the architectural requirement (double-word alignment).
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_kernel ^0.1
. - Rename
use_timer!
→use_mtime!
,TimerOptions
→MtimeOptions
Added
- The new option
ThreadingOptions::PRIVILEGE_LEVEL
allows for running the kernel in other privilege levels than M-mode. use_sbi_timer!
can be used to install a timer driver based on the RISC-V Supervisor Binary Interface.
Fixed
- The default stack alignment (
PortThreading::STACK_ALIGN
) now conforms to the standard ABI requirement (128-bit alignment). - The port startup code now calls
<Traits as Timer>::init
.
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_kernel ^0.1
.
Added
- Added the Windows backend.
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_port_arm_m ^0.3
. rp2040-pac ^0.3
replacesrp2040 ^0.1
as the RP2040 peripheral access crate used byr3_support_rp2040
.
[email protected]
Changed
- Breaking: Adjusted for the new design of R3-OS (separation between interface and implementation). Supports
r3_port_arm ^0.2
.
r3 0.1.3, etc.
All packages
This release only includes changes to the documentation and the package metadata.
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
No specific changes
r3 0.1.2, r3_support_rp2040 0.1.0, etc.
All packages
Changed
- Breaking (semver-exempt): Change the target compiler version to
nightly-2021-10-18
[email protected]
Changed
- Upgrade
tokenlock
to0.3.4
- Using the new version of
tokenlock
, some atomics-based hacks were removed. This might marginally improve the runtime performance as the compiler is given more leeway to optimize memory accesses.
Fixed
- The debug printing of
Mutex
andRecursiveMutex
in an invalid context now produces a message that makes sense.
[email protected]
Changed
- Upgrade
r0
to^1.0.0
- Replace
register 1
withtock-registers 0.7
becausetock-registers 0.6
, which is used byregister
, isn't compatible with the current target compiler.
Fixed
- Remove
#[naked]
when inlining is prerequisite for correctness; functions with#[naked]
are no longer eligible for inlining as of rust-lang/rust#79192. - Rewrite invalid
#[naked]
functions in valid forms
[email protected]
- Breaking: The
cortex-m-rt
binding has been separated tor3_port_arm_m::use_rt!
. - Support
cortex-m
^0.6
and^0.7
- Support
cortex-m-rt
^0.6
and^0.7
r3_port_arm_m
now stealscortex_m::Peripherals
on boot. This is useful in multi-core systems.
[email protected]
Changed
- Support
riscv
^0.5
,^0.6
, and^0.7
- Replace
register 1
withtock-registers 0.7
becausetock-registers 0.6
, which is used byregister
, isn't compatible with the current target compiler.
Fixed
- Rewrite invalid
#[naked]
functions in valid forms
[email protected]
No specific changes
[email protected]
No specific changes
[email protected]
Initial release
[email protected]
No specific changes
0.1.1
Added
r3_port_std
's POSIX backend now supports AArch64.
Fixed
- Wrap const generic arguments in braces, fixing builds on the latest compiler version
- Remove
#[naked]
when inlining is prerequisite for correctness; functions with#[naked]
are no longer eligible for inlining as of rust-lang/rust#79192.