Skip to content

Commit

Permalink
Merge #133 #135
Browse files Browse the repository at this point in the history
133: Update no-std.md r=korken89 a=flip111

* There is no high level OS this means there are no primitives <-- this is wrong because there can be primitives without high level OS otherwise it wouldn't be a "primitive"
* Using jargon "bare metal" without explaining it
* By marking our code with `no_std` we indicate that our code is capable of running in such an environment. <-- this wording makes it so that using `no_std` is the only requirement of having runnable code.
* Dynamic memory allocation can not be used --> not true, use crate (like described lower in the text)

135: Update install.md r=korken89 a=flip111

`For bandwidth and disk usage concerns the default installation only supports native compilation.`
I like what the default installation is doing, not downloading toolchains i don't need. Let's do the same for the book. At the same time, because the reader is just getting into embedded for rust, it's cool to see which toolchains for which CPU cores are already available. This gives a good feeling of control (which toolchain i can choose) and possibilities (many to choose from)

Co-authored-by: flip111 <[email protected]>
  • Loading branch information
bors[bot] and flip111 committed Feb 17, 2019
3 parents bca9927 + f5467ac + 21712a3 commit f42b1b2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
21 changes: 19 additions & 2 deletions src/intro/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,27 @@ rustc 1.31.1 (b6c32da9b 2018-12-18)

For bandwidth and disk usage concerns the default installation only supports
native compilation. To add cross compilation support for the ARM Cortex-M
architecture install the following compilation targets.
architecture choose one of the following compilation targets. Use the last one
for the STM32F3DISCOVERY board and follow along with the book.

Cortex M0 M0+
``` console
$ rustup target add thumbv6m-none-eabi thumbv7m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf
$ rustup target add thumbv6m-none-eabi
```

Cortex M3
``` console
$ rustup target add thumbv7m-none-eabi
```

Cortex M4 M7 without FPU
``` console
$ rustup target add thumbv7em-none-eabi
```

Cortex M4 M7 with FPU <-- STM32F3DISCOVERY
``` console
$ rustup target add thumbv7em-none-eabihf
```

### `cargo-binutils`
Expand Down
14 changes: 8 additions & 6 deletions src/intro/no-std.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ You may also have some sort of sysroot and restrictions on RAM/ROM-usage, and pe
special HW or I/Os. Overall it feels like coding on a special-purpose PC environment.

## Bare Metal Environments
In a bare metal environment there will be no high-level OS running and hosting our code.
This means there will be no primitives, which means there's also no standard library by default.
By marking our code with `no_std` we indicate that our code is capable of running in such an environment.
This means the rust [libstd](https://doc.rust-lang.org/std/) and dynamic memory allocation can't be used by such code.
However, such code can use [libcore](https://doc.rust-lang.org/core/), which can easily be made available
in any kind of environment by providing just a few symbols (for details see [libcore](https://doc.rust-lang.org/core/)).
In a bare metal environment no code has been loaded before your program.
Without the software provided by an OS we can not load the standard library.
Instead the program, along with the crates it uses, can only use the hardware (bare metal) to run.
To prevent rust from loading the standard library use `no_std`.
The platform-agnostic parts of the standard library are available through [libcore](https://doc.rust-lang.org/core/).
libcore also excludes things which are not always desirable in an embedded environment.
One of these things is a memory allocator for dynamic memory allocation.
If you require this or any other functionalities there are often crates which provide these.

### The libstd Runtime
As mentioned before using [libstd](https://doc.rust-lang.org/std/) requires some sort of system integration, but this is not only because
Expand Down

0 comments on commit f42b1b2

Please sign in to comment.