Move some more stuff to the archive, update this link

This commit is contained in:
datdenkikniet 2023-05-20 11:24:03 +02:00
parent ab17bbf9f3
commit 4b3bf59215
3 changed files with 1 additions and 3 deletions

View file

@ -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)

View file

@ -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}}
```

View file

@ -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`.