Add some compiler warnings and fix revealed bugs

This commit is contained in:
Allen Hill
2026-05-05 18:17:02 -07:00
parent a37140a779
commit 9b2c71fa6e
4 changed files with 39 additions and 29 deletions
+1
View File
@@ -6,4 +6,5 @@ AllowShortBlocksOnASingleLine: Empty
IndentCaseLabels: true
IndentPPDirectives: BeforeHash
AlignConsecutiveMacros: Consecutive
AllowShortCaseLabelsOnASingleLine: true
...
+3 -3
View File
@@ -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)
+22 -13
View File
@@ -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,7 +542,8 @@ uint8_t AVCLAN_readbyte(uint8_t *byte) {
}
uint8_t AVCLAN_readframe() {
typedef enum : uint8_t {
struct errtype {
enum : uint8_t {
STARTBIT_TIMEOUT = 0x01,
STARTBIT_LENGTH,
BAD_CONTROLLER_PARITY,
@@ -551,9 +552,7 @@ uint8_t AVCLAN_readframe() {
BAD_LENGTH_PARITY,
BAD_LENGTH_RANGE,
BAD_DATA_PARITY
} errno_t;
struct errtype {
errno_t errno;
} 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 {
struct errtype {
enum : uint8_t {
MUTED = 0x01,
BUSY,
NAK_ADDRESS = 0x10,
NAK_CONTROL,
NAK_MESSAGE_LENGTH,
NAK_DATA
} errno_t;
struct errtype {
errno_t errno;
} 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;
+1 -1
View File
@@ -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();