README.md should be stored in each component folder.
See below for programming guidelines for this repository.
| Name | Designator | Path | Comments |
|---|---|---|---|
| Steering Wheel | stw | components/steering_wheel/ | Steering Wheel Controller |
| BMS Boss | bmsb | components/bms_boss/ | Battery Management System Boss Controller |
| BMS Worker | bmsw | components/bms_worker/ | Battery Management System Boss Controller |
| Bootloader | bl | components/bootloader/ | Embedded Bootloaders for all Controllers |
| Heartbeat | heartbeat | components/heartbeat/ | Generic Heartbeat Application for all Controllers |
| Front Vehicle Controller | vcfront | components/vc/front | Vehicle Controller code specific to the Front Controller |
| Power Distribution Unit | vcpdu | components/vc/pdu | Vehicle Controller code specific to the Power Distribution Unit |
| Rear Vehicle Controller | vcrear | components/vc/rear | Vehicle Controller code specific to the Rear Controller |
| Name | Designator | Path | Comments |
|---|---|---|---|
| Can Bridge | can-bridge | drive-stack/can-bridge | Handles bridging and decoding CAN messages over IPC |
| Concordia UDS Tool | conUDS | drive-stack/conUDS | Tool to drive UDS sessions with controllers. |
| Platform | Designator | Comments |
|---|---|---|
| CFR24 | cfr24 | Competition car for 2024 |
| CFR25 | cfr25 | Competition car for 2025 |
- Each component is broken into 3 main code sources
- Source Code
- The source code is typically located in
./components/$COMPONENT_DESIGNATOR/for each component - Hardware sources to be included
./components/$DESIGNATOR/HW/mcuConfig.yamlunless multiple platforms are supported - The source code, while it varies between component, has these typical areas:
./components/$COMPONENT_DESIGNATOR/build/- Contains all object files, binary files, etc...
./components/$COMPONENT_DESIGNATOR/generated/- Contains code generated by scripts and/or programs which is used by the embedded system
./components/$COMPONENT_DESIGNATOR/HW/- Contains all firmware source code and header files which interfaces between System Calls and the Hardware
./components/$COMPONENT_DESIGNATOR/include/- Contains all System and Application header files
./components/$COMPONENT_DESIGNATOR/lib/- Contains any library source code and header files which the System uses
./components/$COMPONENT_DESIGNATOR/RTOS-Contains all source code and header files relating to the implementation of the System's RTOS./components/$COMPONENT_DESIGNATOR/src- Contains all System and Application level source code
./components/$COMPONENT_DESIGNATOR/BUCK- Defines the build targets for that component
./components/shared/: Team libraries, configurations, drivers, firmware, and other...
- The source code is typically located in
- Embedded System
- Contains libraries, openocd configurations, and platform code accessible to all devices located in
./embedded/ - Select important sections:
./embedded/libs/CMSIS/: Controller independant system level library- Used for RTOS and other controller independant systems
./embedded/platforms/: Supported Hardware and MCU platforms- Contains the HAL/LL, startup code, and link script for the STM32 family of devices in
./embedded/platforms/stm32/
- Contains the HAL/LL, startup code, and link script for the STM32 family of devices in
- Contains libraries, openocd configurations, and platform code accessible to all devices located in
- Chip Configuration
- The chip configuration is stored in YAML files in
./embedded/platforms/$CHIP.yaml
- The chip configuration is stored in YAML files in
- Install
buck2,reindeer, anduvon your host system.
- Build a target with
buck2 build //$TARGET_PATH:$TARGET_NAME- You can specify a specific local output directory with
buck2 build ... --out $SOME_LOCAL_PATH - Buck2 (when not specified) outputs the files to some deep folder in
buck-out/
- You can specify a specific local output directory with
- Run software locally with
buck2 build //$TARGET_PATH:$TARGET_NAME- Software must be compatible with your host system
- To clean your current directory, run
buck2 clean - If doing loading/debugging of physical hardware, the ST-LINK or other interface must be plugged in by USB before starting the container. Docker containers do not support dynamic loading of USB peripherals
- Note: This only works if no bootloader is installed. If a bootloader is installed and you are debugging through JTAG, you should still flash over CAN