|
1 | 1 | ## Sharing Data With Globals
|
2 | 2 |
|
3 |
| -> **NOTE** This content is partially taken with permission from the blog post |
| 3 | +> **NOTE** This content is partially taken (with permission) from the blog post |
4 | 4 | > *[Interrupts Is Threads]* by James Munns, which contains more discussion about this
|
5 | 5 | > topic.
|
6 | 6 |
|
7 | 7 | As I mentioned in the last section, when an interrupt occurs we aren't passed any arguments and
|
8 | 8 | cannot return any result. This makes it hard for our program interact with peripherals and other
|
9 |
| -main program state. Before worrying about this |
10 |
| -bare-metal embedded problem, it is likely worth thinking about threads in "std" Rust. |
| 9 | +main program state. Before worrying about this bare-metal embedded problem, it is likely worth |
| 10 | +thinking about threads in "std" Rust. |
11 | 11 |
|
12 | 12 | ### "std" Rust: Sharing Data With A Thread
|
13 | 13 |
|
@@ -174,15 +174,15 @@ data could end up corrupted.
|
174 | 174 | In embedded Rust we care about the same things when it comes to sharing data with interrupt
|
175 | 175 | handlers! Similar to threads, interrupts can occur at any time, sort of like a thread waking up and
|
176 | 176 | accessing some shared data. This means that the data we share with an interrupt must live long
|
177 |
| -enough, and we must be careful to ensure that our main code isn't in the middle of accessing some |
178 |
| -data shared with the interrupt, just to have the interrupt run and ALSO access that data! |
| 177 | +enough, and we must be careful to ensure that our main code isn't in the middle of working with some |
| 178 | +data shared with an ISR when that ISR gets run and *also* tries to work with the data! |
179 | 179 |
|
180 | 180 | In fact, in embedded Rust, we model interrupts in a similar way that we model threads in Rust: the
|
181 | 181 | same rules apply, for the same reasons. However, in embedded Rust, we have some crucial differences:
|
182 | 182 |
|
183 | 183 | * Interrupts don't work exactly like threads: we set them up ahead of time, and they wait until some
|
184 | 184 | event happens (like a button being pressed, or a timer expiring). At that point they run, but
|
185 |
| - without access to any context. |
| 185 | + without access to any passed-in context. |
186 | 186 |
|
187 | 187 | * Interrupts can be triggered multiple times, once for each time that the event occurs.
|
188 | 188 |
|
@@ -275,8 +275,8 @@ main loop, just after the `wfi()` "wait for interrupt". The count will then be r
|
275 | 275 | an interrupt handler finishes (`examples/count-bounce.rs`). Again, the count is bumped up 1 on every
|
276 | 276 | push of the MB2 A button.
|
277 | 277 |
|
278 |
| -Maybe. Especially if your MB2 is old, you may see a single press bump the counter by several. *This |
279 |
| -is not a software bug.* Mostly. In the next section, I'll talk about what might be going on and how |
280 |
| -we should deal with it. |
| 278 | +Maybe. Especially if your MB2 is old (!), you may see a single press bump the counter by |
| 279 | +several. *This is not a software bug.* Mostly. In the next section, I'll talk about what might be |
| 280 | +going on and how we should deal with it. |
281 | 281 |
|
282 | 282 | [Interrupts Is Threads]: https://onevariable.com/blog/interrupts-is-threads
|
0 commit comments