From 9b2c71fa6e66d15e577c6c32f9514044ed8e9b1c Mon Sep 17 00:00:00 2001 From: Allen Hill Date: Tue, 5 May 2026 18:17:02 -0700 Subject: [PATCH] Add some compiler warnings and fix revealed bugs --- .clang-format | 1 + CMakeLists.txt | 6 ++--- src/avclandrv.c | 59 ++++++++++++++++++++++++++++--------------------- src/sniffer.c | 2 +- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/.clang-format b/.clang-format index 9751a30..8e91404 100644 --- a/.clang-format +++ b/.clang-format @@ -6,4 +6,5 @@ AllowShortBlocksOnASingleLine: Empty IndentCaseLabels: true IndentPPDirectives: BeforeHash AlignConsecutiveMacros: Consecutive +AllowShortCaseLabelsOnASingleLine: true ... diff --git a/CMakeLists.txt b/CMakeLists.txt index 1620592..64db775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,9 +97,9 @@ endif() set(CMAKE_C_STANDARD 17) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_C_FLAGS_RELEASE "-Os") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -save-temps -g -gdwarf-3 -gstrict-dwarf") -set(CMAKE_C_FLAGS_DEBUG "-O0 -save-temps -g -gdwarf-3 -gstrict-dwarf") +set(CMAKE_C_FLAGS_RELEASE "-Wall -Wswitch-enum -Werror -Os") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Wall -Wswitch-enum -Werror -O2 -save-temps -g -gdwarf-3 -gstrict-dwarf") +set(CMAKE_C_FLAGS_DEBUG "-Wall -Wswitch-enum -Werror -O0 -save-temps -g -gdwarf-3 -gstrict-dwarf") # Set startup time to 8 ms (0x4) set(AVR_UPLOADTOOL_BASE_OPTIONS ${AVR_UPLOADTOOL_BASE_OPTIONS} -U syscfg1:w:0x4:m) diff --git a/src/avclandrv.c b/src/avclandrv.c index 23ea16b..e2733a1 100644 --- a/src/avclandrv.c +++ b/src/avclandrv.c @@ -360,7 +360,7 @@ void AVCLAN_sendbit(avclan_bit_t bit) { zero_length = AVCLAN_STARTBIT_LOGIC_0; one_length = AVCLAN_STARTBIT_LOGIC_1; break; - default: + default: __builtin_unreachable(); } set_AVC_logic_for(0, zero_length); set_AVC_logic_for(1, one_length); @@ -542,18 +542,17 @@ uint8_t AVCLAN_readbyte(uint8_t *byte) { } uint8_t AVCLAN_readframe() { - typedef enum : uint8_t { - STARTBIT_TIMEOUT = 0x01, - STARTBIT_LENGTH, - BAD_CONTROLLER_PARITY, - BAD_PERIPHERAL_PARITY, - BAD_CONTROL_PARITY, - BAD_LENGTH_PARITY, - BAD_LENGTH_RANGE, - BAD_DATA_PARITY - } errno_t; struct errtype { - errno_t errno; + enum : uint8_t { + STARTBIT_TIMEOUT = 0x01, + STARTBIT_LENGTH, + BAD_CONTROLLER_PARITY, + BAD_PERIPHERAL_PARITY, + BAD_CONTROL_PARITY, + BAD_LENGTH_PARITY, + BAD_LENGTH_RANGE, + BAD_DATA_PARITY + } errno; union { uint8_t val; // BAD_LENGTH_RANGE: the out-of-range length value struct { @@ -729,20 +728,19 @@ uint8_t AVCLAN_readframe() { } uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame) { - typedef enum : uint8_t { - MUTED = 0x01, - BUSY, - NAK_ADDRESS = 0x10, - NAK_CONTROL, - NAK_MESSAGE_LENGTH, - NAK_DATA - } errno_t; struct errtype { - errno_t errno; + enum : uint8_t { + MUTED = 0x01, + BUSY, + NAK_ADDRESS = 0x10, + NAK_CONTROL, + NAK_MESSAGE_LENGTH, + NAK_DATA + } errno; uint8_t val; } err = {0}; - if (err.errno = AVCLAN_ismuted()) + if ((err.errno = AVCLAN_ismuted())) goto handle_err; stopEvent(); @@ -829,9 +827,13 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame) { switch (err.errno) { case MUTED: break; case BUSY: RS232_Print(": Busy bus\n"); break; - default: + case NAK_ADDRESS: + case NAK_CONTROL: + case NAK_MESSAGE_LENGTH: + case NAK_DATA: RS232_Print("NAK: "); switch (err.errno) { + case NAK_ADDRESS: RS232_Print("address\n"); break; case NAK_CONTROL: RS232_Print("Control\n"); break; case NAK_MESSAGE_LENGTH: RS232_Print("Message length\n"); break; case NAK_DATA: @@ -839,8 +841,12 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame) { RS232_PrintDec(err.val); RS232_Print("]\n"); break; + case MUTED: __builtin_unreachable(); + case BUSY: __builtin_unreachable(); default: } + break; + default: } } else { startEvent(); @@ -1000,6 +1006,7 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) { resp->data = (uint8_t *)&function_change_resp; respond = 1; } + break; default: } break; @@ -1026,14 +1033,14 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) { goto CMD_SW_RESPONSE; case Track_Seek_Up: cd_status.state = cd_SEEKING_TRACK; - *cd_Track++; + (*cd_Track)++; *cd_Time_Min = 0xff; *cd_Time_Sec = 0x7f; cd_status.flags2 = 0xc0; goto CMD_SW_RESPONSE; case Track_Seek_Down: cd_status.state = cd_SEEKING_TRACK; - *cd_Track--; + (*cd_Track)--; *cd_Time_Min = 0xff; *cd_Time_Sec = 0x7f; cd_status.flags2 = 0xc0; @@ -1045,6 +1052,7 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) { resp->peripheral_addr = frame->controller_addr; respond = 1; } + break; default: } break; @@ -1076,6 +1084,7 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) { resp->peripheral_addr = frame->controller_addr; respond = 1; } + break; default: } break; diff --git a/src/sniffer.c b/src/sniffer.c index f1c6e00..39699c2 100644 --- a/src/sniffer.c +++ b/src/sniffer.c @@ -36,7 +36,7 @@ uint8_t readBinary; uint8_t muteBus; uint8_t readkey; -const char const *offon[] = {"OFF", "ON"}; +const char *const offon[] = {"OFF", "ON"}; void Setup(); void general_GPIO_init();