mirror of
https://github.com/rtic-rs/rtic.git
synced 2025-12-20 06:45:36 +01:00
Move some more stuff to the archive, update this link
This commit is contained in:
parent
ab17bbf9f3
commit
4b3bf59215
3 changed files with 1 additions and 3 deletions
|
|
@ -21,8 +21,6 @@
|
|||
- [Avoid copies when message passing](./by-example/tips/indirection.md)
|
||||
- [`'static` super-powers](./by-example/tips/static_lifetimes.md)
|
||||
- [Inspecting generated code](./by-example/tips/view_code.md)
|
||||
<!-- - [Running tasks from RAM](./by-example/tips/from_ram.md) -->
|
||||
<!-- - [`#[cfg(..)]` support](./by-example/tips.md) -->
|
||||
- [RTIC vs. the world](./rtic_vs.md)
|
||||
- [Awesome RTIC examples](./awesome_rtic.md)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,45 +0,0 @@
|
|||
# Running tasks from RAM
|
||||
|
||||
The main goal of moving the specification of RTIC applications to attributes in RTIC v0.4.0 was to allow inter-operation with other attributes. For example, the `link_section` attribute can be applied to tasks to place them in RAM; this can
|
||||
improve performance in some cases.
|
||||
|
||||
> **IMPORTANT**: In general, the `link_section`, `export_name` and `no_mangle` attributes are powerful but also easy to misuse. Incorrectly using any of these attributes can cause undefined behavior; you should always prefer to use safe, higher level attributes around them like `cortex-m-rt`'s `interrupt` and `exception` attributes.
|
||||
>
|
||||
> In the particular case of RAM functions there's no safe abstraction for it in `cortex-m-rt` v0.6.5 but there's an [RFC] for adding a `ramfunc` attribute in a future release.
|
||||
|
||||
[RFC]: https://github.com/rust-embedded/cortex-m-rt/pull/100
|
||||
|
||||
The example below shows how to place the higher priority task, `bar`, in RAM.
|
||||
|
||||
``` rust,noplayground
|
||||
{{#include ../../../../../rtic/examples/ramfunc.rs}}
|
||||
```
|
||||
|
||||
Running this program produces the expected output.
|
||||
|
||||
``` console
|
||||
$ cargo run --target thumbv7m-none-eabi --example ramfunc
|
||||
```
|
||||
|
||||
``` console
|
||||
{{#include ../../../../../rtic/ci/expected/ramfunc.run}}
|
||||
```
|
||||
|
||||
One can look at the output of `cargo-nm` to confirm that `bar` ended in RAM
|
||||
(`0x2000_0000`), whereas `foo` ended in Flash (`0x0000_0000`).
|
||||
|
||||
``` console
|
||||
$ cargo nm --example ramfunc --release | grep ' foo::'
|
||||
```
|
||||
|
||||
``` console
|
||||
{{#include ../../../../../rtic/ci/expected/ramfunc.run.grep.foo}}
|
||||
```
|
||||
|
||||
``` console
|
||||
$ cargo nm --example ramfunc --target thumbv7m-none-eabi --release | grep '*bar::'
|
||||
```
|
||||
|
||||
``` console
|
||||
{{#include ../../../../../rtic/ci/expected/ramfunc.run.grep.bar}}
|
||||
```
|
||||
|
|
@ -7,7 +7,7 @@ Indirection can minimize message passing overhead: instead of sending the buffer
|
|||
|
||||
One can use a global memory allocator to achieve indirection (`alloc::Box`, `alloc::Rc`, etc.), which requires using the nightly channel as of Rust v1.37.0, or one can use a statically allocated memory pool like [`heapless::Pool`].
|
||||
|
||||
[`heapless::Pool`]: https://docs.rs/heapless/0.5.0/heapless/pool/index.html
|
||||
[`heapless::Pool`]: https://docs.rs/heapless/latest/heapless/pool/index.html
|
||||
|
||||
As this example of approach goes completely outside of RTIC resource model with shared and local the program would rely on the correctness of the memory allocator, in this case `heapless::pool`.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue