r3-os / r3 Goto Github PK
View Code? Open in Web Editor NEWR3-OS — Experimental static (μITRON-esque) RTOS for deeply embedded systems, testing the limit of Rust's compile-time evaluation and generics
License: Apache License 2.0
R3-OS — Experimental static (μITRON-esque) RTOS for deeply embedded systems, testing the limit of Rust's compile-time evaluation and generics
License: Apache License 2.0
Used by the following actions:
r3-os/actions-rust-toolchain@patch/pr-209
https://github.com/r3-os/r3/actions/runs/3450536746/jobs/5759188944#step:3:45
actions/cache@v2
https://github.com/r3-os/r3/actions/runs/3450536745/jobs/5759188976#step:5:6LouisBrunner/[email protected]
https://github.com/r3-os/r3/actions/runs/3450536745/jobs/5759188976#step:8:11r3/src/r3_port_std/src/threading_windows.rs
Lines 234 to 237 in 57184ad
Line 10 in ecfb4e1
Lines 45 to 53 in e7696aa
get
used transmute
to make conversion from &Head
to &T
. Here are two problems:
Copy
trait bound is not sufficient for us to safely transmute from &Head
. Suggest to use trait bound such as Pod.r3_core::utils::ZeroInit
should be replaced by bytemuck::Zeroable
. The latter is derivable (which helps us remove some unsafe
impls) and has a better Rust ecosystem compatibility.
Zeroable
is missing the following implementations:
core::atomic::Atomic{Bool,{U,I}{8,16,32,64,size},Ptr<impl Sized>}
(Lokathor/bytemuck#74)Option<fn(Args...) -> R>
Option<&[mut ]_>
UnsafeCell<impl Zeroable>
(Lokathor/bytemuck#148)[impl Zeroable + Sized]
Zeroable
requires Sized
is fixed. by rust-lang/rust#101989
Having a local trait Init
is problematic for a number of reasons:
Init
is implemented on some external types, such as ArrayVec
and TokenLock
, for internal use. However, Init
is also exposed to the user to allow for its use with r3::hunk::Hunk
, giving access to these internal-use-only trait implementations. This means removing these trait implementations is a breaking change.Init
in an external crate requires a dependency on r3
even if the rest of r3
is not needed at all.The best course of action is to replace Init
with something else provided by an upstream crate or a language feature.
Raw interface specificity:
BadId
and causing an undefined behavior instead.Raw interface extensibility:
MutexProtocol
should be non_exhaustive
? How is the kernel supposed to deal with unknown values?QueueOrder
Bag
might be unsafe to ignore. How can we ensure the safety? What properties might fall under this criterion?API design:
define
to make room for runtime construction.r3::kernel::Cfg
isn't a pretty name.Kernel
is not a raw
trait. KernelMutex
is a raw
trait. But they are both in traits
.raw
traits in trait bounds but use Kernel
for global operations? Kernel
being a kitchen sink is actually consistent with higher-level kernel object wrappers (like how Task::set_priority
is bound by System: raw::KernelTaskSetPriority
). But the real problem is that the raw
traits are supposed to be bound by kernel-side semver guarantees.r3_kernel
:
r3_kernel::CfgBuilder
is an awful name.Documentation:
CHANGELOG.md
https://github.com/bitflags/bitflags/releases/tag/2.0.0
Better to bundle this with other breaking changes, such as #14.
Used by the following actions:
actions/checkout@v2
https://github.com/r3-os/r3/actions/runs/3450808912/jobs/5759621733actions-rs/clippy-check@v1
https://github.com/r3-os/r3/actions/runs/3450808912/jobs/5759621839
actions-rs/cargo@v1
https://github.com/r3-os/r3/actions/runs/3450843035/jobs/5759703459
r3-os/actions-rust-toolchain@patch/pr-209
Kernel objects should be able to have names for runtime inspection and to improve the configuration-time error reporting.
(It'd be ideal if we could also track their definition sites, but that would require std::backtrace::Backtrace::frames
to be usable in const fn
.)
https://github.com/r3-os/r3/actions/runs/4430420543/jobs/7822620604
Run LouisBrunner/[email protected]
with:
token: ***
name: Size report: qemu_mps2_an505 --arch cortex_m4f
output: {"summary": "Test suite size report"}
output_text_description_file: size-report.md
conclusion: success
status: completed
Error: Resource not accessible by integration
Please note that with rust-lang/rust#94901 merged, ~const Drop
bounds should be changed to ~const core::marker::Destruct
. Sorry for the inconvenience.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.