Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…idated-Firmware into mattiasjack/bms_diagnostics_mode
  • Loading branch information
mattiaswong6 committed Feb 1, 2025
2 parents 22416ec + 77a1b3a commit 0991c3f
Show file tree
Hide file tree
Showing 96 changed files with 5,964 additions and 797 deletions.
2 changes: 1 addition & 1 deletion .github/actions/build_binary/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ runs:
shell: bash
run: |
cmake --preset "FW Deploy CI" -B ${{ inputs.build_dir }}
xvfb-run cmake --build ${{ inputs.build_dir }} --target ${{ inputs.board }}.hex
cmake --build ${{ inputs.build_dir }} --target ${{ inputs.board }}.hex -- -j $(nproc)
101 changes: 38 additions & 63 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ jobs:
name: Check C Formatting
runs-on: ubuntu-22.04

container:
image: ubcformulaelectric/environment:latest
credentials:
username: ubcformulaelectric
password: ${{ secrets.DOCKER_TOKEN }}
# container:
# image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.DOCKER_TOKEN }}

steps:
# Fix to get git diff working in a Docker container
Expand All @@ -23,64 +23,51 @@ jobs:
uses: actions/checkout@v4

- name: Format code
run: python3 scripts/utilities/fix_formatting.py
run: python3 scripts/utilities/fix_formatting.py # this should just use system dependencies

- name: Check for differences
run: git --no-pager diff --color --exit-code

codegen:
name: Check CubeMX Code Gen
runs-on: ubuntu-22.04
needs: [ clang-format ]
strategy:
fail-fast: false
matrix:
include:
- board: VC
ioc_dir: firmware/quadruna/VC/src/cubemx
env_version: latest
- board: BMS
ioc_dir: firmware/quadruna/BMS/src/cubemx
env_version: latest
- board: FSM
ioc_dir: firmware/quadruna/FSM/src/cubemx
env_version: latest
- board: RSM
ioc_dir: firmware/quadruna/RSM/src/cubemx
env_version: latest
- board: CRIT
ioc_dir: firmware/quadruna/CRIT/src/cubemx
env_version: latest
- board: f4dev
ioc_dir: firmware/dev/f4dev/src/cubemx
env_version: latest
- board: h7dev
ioc_dir: firmware/dev/h7dev/src/cubemx
env_version: latest
# - board: BMS_Quint
# - board: BMS
# ioc_dir: firmware/quintuna/BMS/src/cubemx
# env_version: cube_6_12_0
- board: CRIT
ioc_dir: firmware/quintuna/CRIT/src/cubemx
env_version: cube_6_12_0
# - board: FSM_Quint
# - board: FSM
# ioc_dir: firmware/quintuna/FSM/src/cubemx
# env_version: cube_6_12_0
- board: RSM
ioc_dir: firmware/quintuna/RSM/src/cubemx
env_version: cube_6_12_0
- board: VC
ioc_dir: firmware/quintuna/VC/src/cubemx
env_version: cube_6_12_0
- board: DAM
ioc_dir: firmware/quintuna/DAM/src/cubemx
env_version: cube_6_12_0

container:
image: ubcformulaelectric/environment:${{ matrix.env_version }}
credentials:
username: ubcformulaelectric
password: ${{ secrets.DOCKER_TOKEN }}
# both packages shouldn't need to use python dependences that we need...
# container:
# image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.DOCKER_TOKEN }}

steps:
# Fix to get git diff working in a Docker container
Expand All @@ -91,8 +78,9 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4

- name: Generate Log4J file
run: python3 scripts/utilities/generate_log4j_properties.py --log4j_properties_output /root/.stm32cubemx/log4j.properties
# should not need this
# - name: Generate Log4J file
# run: python3 scripts/utilities/generate_log4j_properties.py --log4j_properties_output /root/.stm32cubemx/log4j.properties

# To ensure that the generated STM32CubeMX code is up to date with the .ioc file, we
# we also generate a checksum from the .ioc file when code is generated during builds.
Expand All @@ -108,45 +96,32 @@ jobs:
run: git --no-pager diff --color --exit-code

build-firmware:
needs: [ clang-format ]
needs: [ clang-format, codegen ]
name: Build Firmware Binaries
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- board: quadruna_VC
env_version: latest
- board: quadruna_BMS
env_version: latest
- board: quadruna_FSM
env_version: latest
- board: quadruna_RSM
env_version: latest
- board: quadruna_CRIT
env_version: latest
- board: f4dev
env_version: latest
- board: h7dev
env_version: latest
# - board: quintuna_BMS
# env_version: cube_6_12_0
- board: quintuna_CRIT
env_version: cube_6_12_0
# - board: quintuna_FSM
# env_version: cube_6_12_0
- board: quintuna_RSM
env_version: cube_6_12_0
- board: quintuna_VC
env_version: cube_6_12_0
- board: quintuna_DAM
env_version: cube_6_12_0

container:
image: ubcformulaelectric/environment:${{ matrix.env_version }}
credentials:
username: ubcformulaelectric
password: ${{ secrets.docker_token }}
image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.docker_token }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down Expand Up @@ -176,10 +151,10 @@ jobs:
car: quadruna

container:
image: ubcformulaelectric/environment:latest
credentials:
username: ubcformulaelectric
password: ${{ secrets.DOCKER_TOKEN }}
image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.DOCKER_TOKEN }}

env:
BUILD_DIR: build_fw_test
Expand Down Expand Up @@ -210,10 +185,10 @@ jobs:
runs-on: ubuntu-22.04
needs: [ clang-format ]
container:
image: ubcformulaelectric/environment:latest
credentials:
username: ubcformulaelectric
password: ${{ secrets.DOCKER_TOKEN }}
image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.DOCKER_TOKEN }}

env:
BUILD_DIR: build_fw_test
Expand Down Expand Up @@ -244,10 +219,10 @@ jobs:
runs-on: ubuntu-22.04
needs: [ clang-format ]
container:
image: ubcformulaelectric/environment:latest
credentials:
username: ubcformulaelectric
password: ${{ secrets.DOCKER_TOKEN }}
image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.DOCKER_TOKEN }}

env:
BUILD_DIR: build_fw_test
Expand Down Expand Up @@ -277,10 +252,10 @@ jobs:
runs-on: ubuntu-22.04
needs: [ clang-format ]
container:
image: ubcformulaelectric/environment:latest
credentials:
username: ubcformulaelectric
password: ${{ secrets.DOCKER_TOKEN }}
image: ubcformulaelectric/environment:no_cube
# credentials:
# username: ubcformulaelectric
# password: ${{ secrets.DOCKER_TOKEN }}

env:
BUILD_DIR: build_fw_test
Expand Down
50 changes: 25 additions & 25 deletions environment/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,23 @@
FROM --platform=amd64 ubuntu:22.04
FROM debian:12.9-slim AS builder

# Install dependencies:
# wget: Downloading files from the internet
# unzip: Tool to extract zipped archives
RUN apt update -y && apt install -y bzip2

ADD "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2?rev=78196d3461ba4c9089a67b5f33edf82a&hash=D484B37FF37D6FC3597EBE2877FB666A41D5253B" /usr/local/bin
RUN tar -xvf /usr/local/bin/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /

# Install STM32CubeMX for auto-generating code.
#COPY scripts/install_stm32cubemx.py /root/environment/
#COPY data/en.stm32cubemx-lin-v6-12-0.zip /root/environment
#RUN python3 install_stm32cubemx.py --install-dir /usr/local/STM32CubeMX --cube-zip en.stm32cubemx-lin-v6-12-0.zip

FROM debian:12.9-slim AS environment

# COPY over builds from builder
COPY --from=builder /gcc-arm-none-eabi-10.3-2021.10 /usr/local
#COPY --from=builder /usr/local/STM32CubeMX /usr/local/STM32CubeMX

# pip: For installing python packages
# git: For pulling external repos, invoked via cmake
# git-lfs: Large file storage, used for saving zipped STM32CubeMX installer
Expand All @@ -15,34 +30,19 @@ FROM --platform=amd64 ubuntu:22.04
# libxtst6: Random library required for running STM32CubeMX V6 in container
# libxrender1: Random library required for running STM32CubeMX V6 in container
RUN apt update -y && apt install -y \
wget \
unzip \
pip \
git \
git-lfs \
xvfb \
# xvfb \
libncurses5 \
valgrind \
libgtk-3-0 \
libxi6 \
libxtst6 \
libxrender1 \
# libgtk-3-0 \
# libxi6 \
# libxtst6 \
# libxrender1 \
protobuf-compiler

# Install python package dependencies.
WORKDIR /root/environment
COPY requirements.txt /root/environment/
RUN echo "[global]\n break-system-packages = true" > /etc/pip.conf
COPY requirements.txt .
RUN pip3 install -r requirements.txt

# Install GNU ARM Embedded Toolchain, for compiling/debugging on embedded.
COPY scripts/install_gcc_arm_none_eabi.sh /root/environment/
RUN /bin/sh ./install_gcc_arm_none_eabi.sh /usr/local

# Install STM32CubeMX for auto-generating code.
COPY scripts/install_stm32cubemx.py /root/environment/
COPY data/en.stm32cubemx-lin-v6-12-0.zip /root/environment
RUN python3 install_stm32cubemx.py --install-dir /usr/local/STM32CubeMX --cube-zip en.stm32cubemx-lin-v6-12-0.zip

# Cleanup copied directory.
WORKDIR /root/
RUN rm -rf environment
RUN rm requirements.txt
14 changes: 8 additions & 6 deletions firmware/cmake/stmlib.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ IF (${CMAKE_HOST_WIN32}) # this is slightly more reliable than WIN32
ELSE ()
set(LOG4J_PROPERTIES "$ENV{HOME}/.stm32cubemx/log4j.properties")
ENDIF ()
message(" 📝 Generating log4j.properties at ${LOG4J_PROPERTIES}")
execute_process(
COMMAND ${PYTHON_COMMAND}
${SCRIPTS_DIR}/utilities/generate_log4j_properties.py
--log4j_properties_output ${LOG4J_PROPERTIES}
)
if (NOT EXISTS ${LOG4J_PROPERTIES})
execute_process(
COMMAND ${PYTHON_COMMAND}
${SCRIPTS_DIR}/utilities/generate_log4j_properties.py
--log4j_properties_output ${LOG4J_PROPERTIES}
)
endif ()
message(" 📝 log4j.properties generated at ${LOG4J_PROPERTIES}")

file(GLOB_RECURSE NEWLIB_SRCS "${THIRD_PARTY_DIR}/newlib_freertos_patch/*.c")

Expand Down
3 changes: 2 additions & 1 deletion firmware/quadruna/BMS/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ list(APPEND IO_SRCS
"${SHARED_IO_INCLUDE_DIR}/io_jsoncan.c"
"${SHARED_IO_INCLUDE_DIR}/io_time.c"
"${SHARED_IO_INCLUDE_DIR}/io_chimera.c"
"${SHARED_IO_INCLUDE_DIR}/io_taskMonitor.c"
)
set(IO_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src/io" "${SHARED_IO_INCLUDE_DIR}" "${SHARED_IO_INCLUDE_QUADRUNA_DIR}")

Expand All @@ -43,7 +44,6 @@ list(APPEND HW_SRCS
"${SHARED_HW_INCLUDE_DIR}/hw_spi.c"
"${SHARED_HW_INCLUDE_DIR}/hw_pwmInput.c"
"${SHARED_HW_INCLUDE_DIR}/hw_watchdog.c"
"${SHARED_HW_INCLUDE_DIR}/hw_stackWaterMark.c"
"${SHARED_HW_INCLUDE_DIR}/hw_assert.c"
"${SHARED_HW_INCLUDE_DIR}/hw_uart.c"
"${SHARED_HW_INCLUDE_DIR}/hw_error.c"
Expand Down Expand Up @@ -156,6 +156,7 @@ elseif ("${TARGET}" STREQUAL "test")

# FAKE IO
set(HEADERS_TO_FAKE
"${SHARED_IO_INCLUDE_DIR}/io_taskMonitor.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/io/ltc6813/io_ltc6813CellTemps.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/io/ltc6813/io_ltc6813CellVoltages.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/io/ltc6813/io_ltc6813Shared.h"
Expand Down
5 changes: 1 addition & 4 deletions firmware/quadruna/BMS/src/app/app_heartbeatMonitors.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,4 @@ static HeartbeatBoard heartbeat_boards[1] = {
}
};

HeartbeatMonitor hb_monitor = { .boards = heartbeat_boards,
.board_count = 1,
.block_faults = false,
.own_heartbeat = app_canTx_BMS_Heartbeat_set };
HeartbeatMonitor hb_monitor = { .boards = heartbeat_boards, .board_count = 1, .block_faults = false };
20 changes: 20 additions & 0 deletions firmware/quadruna/BMS/src/app/app_stackWaterMarks.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include "app_stackWaterMarks.h"
#include "io_taskMonitors.h"
#include "app_canAlerts.h"

/** @brief The stack watermark threshold as a percentage of the stack size */
#define STACK_HIGH_WATERMARK_THRESHOLD 0.7f

void app_stackWaterMarkConfig_check(void)
{
app_canAlerts_BMS_Warning_StackWaterMarkHighTask1Hz_set(
io_taskMonitor_getStackUsage(&task_1_hz_monitor) > STACK_HIGH_WATERMARK_THRESHOLD);
app_canAlerts_BMS_Warning_StackWaterMarkHighTask100Hz_set(
io_taskMonitor_getStackUsage(&task_100_hz_monitor) > STACK_HIGH_WATERMARK_THRESHOLD);
app_canAlerts_BMS_Warning_StackWaterMarkHighTask1kHz_set(
io_taskMonitor_getStackUsage(&task_1_khz_monitor) > STACK_HIGH_WATERMARK_THRESHOLD);
app_canAlerts_BMS_Warning_StackWaterMarkHighTaskCanRx_set(
io_taskMonitor_getStackUsage(&task_can_rx_monitor) > STACK_HIGH_WATERMARK_THRESHOLD);
app_canAlerts_BMS_Warning_StackWaterMarkHighTaskCanTx_set(
io_taskMonitor_getStackUsage(&task_can_tx_monitor) > STACK_HIGH_WATERMARK_THRESHOLD);
}
14 changes: 13 additions & 1 deletion firmware/quadruna/BMS/src/cubemx/Inc/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ extern "C"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "cmsis_os.h"
/* USER CODE END Includes */

/* Exported types ------------------------------------------------------------*/
Expand All @@ -53,6 +53,18 @@ extern "C"
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim15;
extern UART_HandleTypeDef huart1;

extern osThreadId_t Task1HzHandle;
extern osThreadId_t Task100HzHandle;
extern osThreadId_t Task1kHzHandle;
extern osThreadId_t TaskCanRxHandle;
extern osThreadId_t TaskCanTxHandle;

extern const osThreadAttr_t Task100Hz_attributes;
extern const osThreadAttr_t TaskCanRx_attributes;
extern const osThreadAttr_t TaskCanTx_attributes;
extern const osThreadAttr_t Task1kHz_attributes;
extern const osThreadAttr_t Task1Hz_attributes;
/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
Expand Down
Loading

0 comments on commit 0991c3f

Please sign in to comment.