diff --git a/README.md b/README.md index 77bcdaf15f1224390d5062dcb9d096533130d380..ed4def9add8006b39d71e9d36cc193a0ea7251fe 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Embedded systems are everywhere. Use-cases ranges from heavy industry to tiny sensors in your everyday life. # Overview - + # Hardware @@ -24,13 +24,21 @@ For more information: https://en.wikipedia.org/wiki/ARM_architecture A typical way to access and interface with the hardware connected to your microcontroller is by accessing various registers, which is memory regions mapped to some hardware. + # Software In order to instruct the hardware some sort of software is required. Software is the instructions for the ARM-processor, telling it which registers and what memory to modify. -## Compiler + +## Toolchain + +"Toolchain" refers to the collection of hardware and/or software which makes it possible to develop for some specific platform. + +The **compiler**, **linker** and some **hardware-interface** are typical tools found in a toolchain. + +### Compiler Two of the main open-source compiler projects: @@ -40,7 +48,46 @@ Two of the main open-source compiler projects: In this course LLVM will be used to turn our source code, written in Rust, into ready to run ARM instructions. -## Toolchain +### Linker + +The job of the linker is to turn often many output object files of the compiler and combine them into an application. + +* LD The GNU linker +* LLD The LLVM project linker + +### Bare-metal programming via hardware interfaces + +#### GDB / LLDB Debugger + +When developing software it is very nice to have control over the execution and being able to inspect both hardware and software state. + +The debuggers provides an interface for doing exactly that. + +#### OpenOCD + +The Open On-Chip Debugger + +Quoting its [documentation](http://openocd.org/doc-release/pdf/openocd.pdf): + +"The Open On-Chip Debugger (OpenOCD) aims to provide debugging, in-system program-ming and boundary-scan testing for embedded target devices." + + +#### ST-link + +STMicroelectronics provides an in-circuit debugger and programmer for the STM8 and STM32 microcontrollers. + +A nice feature of the STM Nucleo development boards is that the programmer is included as part of the device. + +But it can also program other microcontrollers via pin headers. + +#### Blackmagic probe + +An open source hardware debugger supporting JTAG and SWD. + +Vendor agnostic + +[github page](https://github.com/blacksphere/blackmagic/wiki) + ### Git @@ -50,16 +97,13 @@ It allows for convenient collaboration and handles everything from small one-fil [projects](https://github.com/torvalds/linux). -### GDB / LLDB - - -## Rust +### Rust Installation https://rustup.rs/ -### Cargo +#### Cargo The package manager for Rust @@ -67,22 +111,16 @@ Taking care of dependencies, compilation and many other things. For more information: https://doc.rust-lang.org/cargo/ -### Cargo-binutils +#### Cargo-binutils -#### Installation +Provides cargo subcommands which invokes various LLVM tools. + +##### Installation ``` +cargo install cargo-binutils rustup component add llvm-tools-preview ``` -C - - -# Bare-metal programming - -## OpenOCD - -## ST-link - -## Blackmagic probe +##### Usage -## GDB / LLDB Debugger +See [cargo-binutils repo](https://github.com/rust-embedded/cargo-binutils)