aboutsummaryrefslogtreecommitdiff
path: root/book/en/src/internals/critical-sections.md
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-10-05 08:40:19 +0000
committerGitHub <noreply@github.com>2020-10-05 08:40:19 +0000
commitdbf9a7f2983fb00aee130305fec0019c12eaef76 (patch)
tree0422a3712af398436cebfa9f8e6ac422de65dde1 /book/en/src/internals/critical-sections.md
parent04d415c3c6cce7f763decdf02104d827f2e4de7c (diff)
parent95503b6bdff3f392450d1972b0c499b79a9c2092 (diff)
Merge #368
368: Mod over const r=korken89 a=AfoHT Related [RFC](https://github.com/rtic-rs/rfcs/pull/34) Dependent on [rtic-syntax-PR30](https://github.com/rtic-rs/rtic-syntax/pull/30) ~~Currently using my own dev-branch~~ Co-authored-by: Henrik Tjäder <henrik@tjaders.com>
Diffstat (limited to 'book/en/src/internals/critical-sections.md')
-rw-r--r--book/en/src/internals/critical-sections.md24
1 files changed, 12 insertions, 12 deletions
diff --git a/book/en/src/internals/critical-sections.md b/book/en/src/internals/critical-sections.md
index f95a5a7..a064ad0 100644
--- a/book/en/src/internals/critical-sections.md
+++ b/book/en/src/internals/critical-sections.md
@@ -32,7 +32,7 @@ The example below shows the different types handed out to each task:
``` rust
#[rtic::app(device = ..)]
-const APP: () = {
+mut app {
struct Resources {
#[init(0)]
x: u64,
@@ -57,7 +57,7 @@ const APP: () = {
}
// ..
-};
+}
```
Now let's see how these types are created by the framework.
@@ -99,7 +99,7 @@ pub mod bar {
}
}
-const APP: () = {
+mod app {
static mut x: u64 = 0;
impl rtic::Mutex for resources::x {
@@ -129,7 +129,7 @@ const APP: () = {
// ..
})
}
-};
+}
```
## `lock`
@@ -225,7 +225,7 @@ Consider this program:
``` rust
#[rtic::app(device = ..)]
-const APP: () = {
+mod app {
struct Resources {
#[init(0)]
x: u64,
@@ -277,7 +277,7 @@ const APP: () = {
}
// ..
-};
+}
```
The code generated by the framework looks like this:
@@ -315,7 +315,7 @@ pub mod foo {
}
}
-const APP: () = {
+mod app {
use cortex_m::register::basepri;
#[no_mangle]
@@ -368,7 +368,7 @@ const APP: () = {
}
// repeat for resource `y`
-};
+}
```
At the end the compiler will optimize the function `foo` into something like
@@ -430,7 +430,7 @@ handler through preemption. This is best observed in the following example:
``` rust
#[rtic::app(device = ..)]
-const APP: () = {
+mod app {
struct Resources {
#[init(0)]
x: u64,
@@ -484,7 +484,7 @@ const APP: () = {
// ..
}
-};
+}
```
IMPORTANT: let's say we *forget* to roll back `BASEPRI` in `UART1` -- this would
@@ -493,7 +493,7 @@ be a bug in the RTIC code generator.
``` rust
// code generated by RTIC
-const APP: () = {
+mod app {
// ..
#[no_mangle]
@@ -513,7 +513,7 @@ const APP: () = {
// BUG: FORGOT to roll back the BASEPRI to the snapshot value we took before
basepri::write(initial);
}
-};
+}
```
The consequence is that `idle` will run at a dynamic priority of `2` and in fact