Embedded system development @ Illini RoboMaster
You can follow the instructions below to setup the necessary environments for building the source code and flashing the embedded chips.
Go to the official download page for ARM Toolchain.
Download the pre-built toolchain according to your operating system.
Decompress it to some directory and find an absolute path to the bin
directory.
In my case: /Users/alvin/gcc-arm-none-eabi-9-2020-q2-update/bin
.
For Linux / Mac users, add the following line (replace <path>
with the actual binary path found in step 3) to ~/.bashrc
for bash users
or ~/.zshrc
for zsh users.
export PATH=<path>:$PATH
Run the following command to build the entire project.
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j
Change build type to Debug
or RelWithDebInfo
in order to debug with gdb
.
Note that Debug
build could be much slower than the other two due to lack
of compiler optimizations.
Install stlink.
brew install stlink
could be a shortcut.Flash one of the example programs by running make flash-<xxx>
in the
build/
directory created at compilation.
e.g. make flash-example_buzzer
-> and you shall hear some music (or noise)
Use the following guide when making contributions to this repo.
The continuous integration system will check the source code against Google C++ Style Guide. All codes are required to be formatted correctly before merging. There are several integrated build commands that can help you automatically format your changes.
Prerequisite: install clang-format
(version 10 recommended)
sudo apt install clang-format-10
.With clang-format
installed, you can run the following commands inside build
to automatically format your changes.
make check-format
: Check diff
between current source and
formatted source (without modifying any source file)make format
: Format all source files (Modifies file inplace)gdb
To debug embedded systems on a host machine, we would need a remote gdb server. There are 2 choices for such server, with tradeoffs of their own.
st-util
This tool comes with stlink, but be aware
that this is a thirdparty implementation and is not stable. The most
recent release tested to be working is v1.5.1
.
OpenOCD
This tool is much more stable but is slightly less intelligent in detecting ST-LINK version and it has not been updated since 2017. To install it,
brew install openocd
for Mac userssudo apt install openocd
for Linux (Ubuntu) usersFollow the steps below to debug an executable
gdb
server by either choice
st-util
openocd -f <project root>/debug/OpenOCD/st-link-v2-1.cfg
cd
into the build
directory and run make debug-xxx
(e.g. make debug-example_buzzer
). This will open up a gdb
session.target extended-remote :<port>
(or tar ext :<port>
in short )
to connect to the gdb
server.
st-util
, replace <port>
with 4242
.openocd
, replace <port>
with 3333
.load
to flash the executable (Note that you can also run make
here
without exiting gdb
to re-build the executable if you modified some
source code).gdb
debugger: use commands like continue
,
run
, break
, watch
, next
, step
the same way you will expect.