Skip to content

Releases: r3-os/r3

r3 0.2.4

16 Nov 00:26
@yvt yvt
Compare
Choose a tag to compare

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

16 Aug 13:40
@yvt yvt
Compare
Choose a tag to compare

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 the unwind 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 behind riscv-rt Cargo feature.

Fixed

  • This crate no longer exports symbol names like 0 and 1, 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

16 Aug 12:45
@yvt yvt
Compare
Choose a tag to compare

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

20 Mar 09:47
@yvt yvt
Compare
Choose a tag to compare

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

20 Mar 03:33
@yvt yvt
Compare
Choose a tag to compare

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 to r3::kernel::LocalTask::current and now requires a task context. It returns LocalTask, which cannot be sent to another thread but whose reference (&LocalTask or TaskRef) can be.
  • r3::kernel::ResultCode::BadId was renamed to NoAccess and covers general protection failures detected by a now-optional protection mechanism. This means that application and library code can't rely on NoAccess 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 to chrono_0p4.
  • r3::sync is now gated by cfg(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 implement Init just to put a custom type in Mutex, and that each Mutex 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!, TimerOptionsMtimeOptions

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 replaces rp2040 ^0.1 as the RP2040 peripheral access crate used by r3_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.

26 Feb 09:22
@yvt yvt
Compare
Choose a tag to compare

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.

26 Feb 09:13
@yvt yvt
Compare
Choose a tag to compare

All packages

Changed

  • Breaking (semver-exempt): Change the target compiler version to nightly-2021-10-18

[email protected]

Changed

  • Upgrade tokenlock to 0.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 and RecursiveMutex in an invalid context now produces a message that makes sense.

[email protected]

Changed

  • Upgrade r0 to ^1.0.0
  • Replace register 1 with tock-registers 0.7 because tock-registers 0.6, which is used by register, 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 to r3_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 steals cortex_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 with tock-registers 0.7 because tock-registers 0.6, which is used by register, 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

20 Dec 06:22
@yvt yvt
Compare
Choose a tag to compare

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.