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 IndentCaseLabels: true
IndentPPDirectives: BeforeHash IndentPPDirectives: BeforeHash
AlignConsecutiveMacros: Consecutive AlignConsecutiveMacros: Consecutive
AllowShortCaseLabelsOnASingleLine: true
... ...
+3 -3
View File
@@ -97,9 +97,9 @@ endif()
set(CMAKE_C_STANDARD 17) set(CMAKE_C_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_FLAGS_RELEASE "-Os") set(CMAKE_C_FLAGS_RELEASE "-Wall -Wswitch-enum -Werror -Os")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -save-temps -g -gdwarf-3 -gstrict-dwarf") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Wall -Wswitch-enum -Werror -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_DEBUG "-Wall -Wswitch-enum -Werror -O0 -save-temps -g -gdwarf-3 -gstrict-dwarf")
# Set startup time to 8 ms (0x4) # Set startup time to 8 ms (0x4)
set(AVR_UPLOADTOOL_BASE_OPTIONS ${AVR_UPLOADTOOL_BASE_OPTIONS} -U syscfg1:w:0x4:m) set(AVR_UPLOADTOOL_BASE_OPTIONS ${AVR_UPLOADTOOL_BASE_OPTIONS} -U syscfg1:w:0x4:m)
+34 -25
View File
@@ -360,7 +360,7 @@ void AVCLAN_sendbit(avclan_bit_t bit) {
zero_length = AVCLAN_STARTBIT_LOGIC_0; zero_length = AVCLAN_STARTBIT_LOGIC_0;
one_length = AVCLAN_STARTBIT_LOGIC_1; one_length = AVCLAN_STARTBIT_LOGIC_1;
break; break;
default: default: __builtin_unreachable();
} }
set_AVC_logic_for(0, zero_length); set_AVC_logic_for(0, zero_length);
set_AVC_logic_for(1, one_length); set_AVC_logic_for(1, one_length);
@@ -542,18 +542,17 @@ uint8_t AVCLAN_readbyte(uint8_t *byte) {
} }
uint8_t AVCLAN_readframe() { 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 { 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 { union {
uint8_t val; // BAD_LENGTH_RANGE: the out-of-range length value uint8_t val; // BAD_LENGTH_RANGE: the out-of-range length value
struct { struct {
@@ -729,20 +728,19 @@ uint8_t AVCLAN_readframe() {
} }
uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame) { 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 { 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; uint8_t val;
} err = {0}; } err = {0};
if (err.errno = AVCLAN_ismuted()) if ((err.errno = AVCLAN_ismuted()))
goto handle_err; goto handle_err;
stopEvent(); stopEvent();
@@ -829,9 +827,13 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame) {
switch (err.errno) { switch (err.errno) {
case MUTED: break; case MUTED: break;
case BUSY: RS232_Print(": Busy bus\n"); 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: "); RS232_Print("NAK: ");
switch (err.errno) { switch (err.errno) {
case NAK_ADDRESS: RS232_Print("address\n"); break;
case NAK_CONTROL: RS232_Print("Control\n"); break; case NAK_CONTROL: RS232_Print("Control\n"); break;
case NAK_MESSAGE_LENGTH: RS232_Print("Message length\n"); break; case NAK_MESSAGE_LENGTH: RS232_Print("Message length\n"); break;
case NAK_DATA: case NAK_DATA:
@@ -839,8 +841,12 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame) {
RS232_PrintDec(err.val); RS232_PrintDec(err.val);
RS232_Print("]\n"); RS232_Print("]\n");
break; break;
case MUTED: __builtin_unreachable();
case BUSY: __builtin_unreachable();
default: default:
} }
break;
default:
} }
} else { } else {
startEvent(); startEvent();
@@ -1000,6 +1006,7 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) {
resp->data = (uint8_t *)&function_change_resp; resp->data = (uint8_t *)&function_change_resp;
respond = 1; respond = 1;
} }
break;
default: default:
} }
break; break;
@@ -1026,14 +1033,14 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) {
goto CMD_SW_RESPONSE; goto CMD_SW_RESPONSE;
case Track_Seek_Up: case Track_Seek_Up:
cd_status.state = cd_SEEKING_TRACK; cd_status.state = cd_SEEKING_TRACK;
*cd_Track++; (*cd_Track)++;
*cd_Time_Min = 0xff; *cd_Time_Min = 0xff;
*cd_Time_Sec = 0x7f; *cd_Time_Sec = 0x7f;
cd_status.flags2 = 0xc0; cd_status.flags2 = 0xc0;
goto CMD_SW_RESPONSE; goto CMD_SW_RESPONSE;
case Track_Seek_Down: case Track_Seek_Down:
cd_status.state = cd_SEEKING_TRACK; cd_status.state = cd_SEEKING_TRACK;
*cd_Track--; (*cd_Track)--;
*cd_Time_Min = 0xff; *cd_Time_Min = 0xff;
*cd_Time_Sec = 0x7f; *cd_Time_Sec = 0x7f;
cd_status.flags2 = 0xc0; cd_status.flags2 = 0xc0;
@@ -1045,6 +1052,7 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) {
resp->peripheral_addr = frame->controller_addr; resp->peripheral_addr = frame->controller_addr;
respond = 1; respond = 1;
} }
break;
default: default:
} }
break; break;
@@ -1076,6 +1084,7 @@ uint8_t AVCLAN_handleframe(const AVCLAN_frame_t *frame) {
resp->peripheral_addr = frame->controller_addr; resp->peripheral_addr = frame->controller_addr;
respond = 1; respond = 1;
} }
break;
default: default:
} }
break; break;
+1 -1
View File
@@ -36,7 +36,7 @@ uint8_t readBinary;
uint8_t muteBus; uint8_t muteBus;
uint8_t readkey; uint8_t readkey;
const char const *offon[] = {"OFF", "ON"}; const char *const offon[] = {"OFF", "ON"};
void Setup(); void Setup();
void general_GPIO_init(); void general_GPIO_init();