commaai / panda

code powering the comma.ai panda
MIT License
1.52k stars 763 forks source link

enable unusedFunction #1878

Open 0x41head opened 6 months ago

0x41head commented 6 months ago

for #1794

adeebshihadeh commented 6 months ago

We should also add a test case for unusedFunction here since it takes a very unique code path.

https://github.com/commaai/panda/blob/00fab5e18e6d14378abb755d49221fc605195741/tests/misra/test_mutation.py#L38

adeebshihadeh commented 6 months ago

Not sure how the new test case is passing. It didn't catch either of these:

batman:panda$ git diff .
diff --git a/board/bootstub.c b/board/bootstub.c
index aee665e7..16d18903 100644
--- a/board/bootstub.c
+++ b/board/bootstub.c
@@ -28,6 +28,10 @@ void fail(void) {
   soft_flasher_start();
 }

+void abc(void) {
+
+}
+
 // know where to sig check
 extern void *_app_start[];

diff --git a/board/main.c b/board/main.c
index 061a9138..37f6c236 100644
--- a/board/main.c
+++ b/board/main.c
@@ -32,6 +32,10 @@

 // ********************* Serial debugging *********************

+void unusedfunction(void) {
+
+}
+
 bool check_started(void) {
   bool started = current_board->check_ignition() || ignition_can;
   ignition_seen |= started;
0x41head commented 6 months ago

hmm.. defining pre-processor symbols like seems to invoke the unusedFunction error. cppcheck --enable=unusedFunction --quiet -DSTM32F4 -DUID_BASE -DPANDA -DSTM32H7 $PANDA_DIR/board/

Any particular reason you undefined it @adeebshihadeh ?

Log:

/home/aryan/Desktop/open-source/panda/board/jungle/main.c:169:3: error: There is an unknown macro here somewhere. Configuration is required. If REGISTER_INTERRUPT is a macro then please configure it. [unknownMacro]
  REGISTER_INTERRUPT(TICK_TIMER_IRQ, tick_handler, 10U, FAULT_INTERRUPT_RATE_TICK)
  ^
/home/aryan/Desktop/open-source/panda/board/drivers/can_common.h:200:0: style: The function 'can_set_forwarding' is never used. [unusedFunction]
void can_set_forwarding(uint8_t from, uint8_t to) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/gpio.h:71:0: style: The function 'gpio_set_all_output' is never used. [unusedFunction]
void gpio_set_all_output(const gpio_t *pins, uint8_t num_pins, bool enabled) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/gpio.h:77:0: style: The function 'gpio_set_bitmask' is never used. [unusedFunction]
void gpio_set_bitmask(const gpio_t *pins, uint8_t num_pins, uint32_t bitmask) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/uart.h:154:0: style: The function 'putui' is never used. [unusedFunction]
void putui(uint32_t i) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/watchdog.h:10:0: style: The function 'watchdog_init' is never used. [unusedFunction]
void watchdog_init(WatchdogTimeout timeout) {
^
/home/aryan/Desktop/open-source/panda/board/main.c:35:0: style: The function 'test' is never used. [unusedFunction]
void test(void) {}
^
/home/aryan/Desktop/open-source/panda/board/safety.h:110:0: style: The function 'gen_crc_lookup_table_16' is never used. [unusedFunction]
void gen_crc_lookup_table_16(uint16_t poly, uint16_t crc_lut[]) {
^
/home/aryan/Desktop/open-source/panda/board/safety/safety_hyundai_common.h:90:0: style: The function 'hyundai_common_canfd_compute_checksum' is never used. [unusedFunction]
uint32_t hyundai_common_canfd_compute_checksum(const CANPacket_t *to_push) {
^
/home/aryan/Desktop/open-source/panda/board/stm32h7/lldac.h:1:0: style: The function 'dac_init' is never used. [unusedFunction]
void dac_init(DAC_TypeDef *dac, uint8_t channel, bool dma) {
^
/home/aryan/Desktop/open-source/panda/board/stm32h7/lldac.h:30:0: style: The function 'dac_set' is never used. [unusedFunction]
void dac_set(DAC_TypeDef *dac, uint8_t channel, uint32_t value) {
adeebshihadeh commented 6 months ago

H7 and F4 should be mutually exclusive.

0x41head commented 6 months ago

cppcheck --enable=unusedFunction --quiet -DUID_BASE -DPANDA -DSTM32F4 $PANDA_DIR/board/main.c generates

/home/aryan/Desktop/open-source/panda/board/jungle/main.c:169:3: error: There is an unknown macro here somewhere. Configuration is required. If REGISTER_INTERRUPT is a macro then please configure it. [unknownMacro]
  REGISTER_INTERRUPT(TICK_TIMER_IRQ, tick_handler, 10U, FAULT_INTERRUPT_RATE_TICK)
  ^
/home/aryan/Desktop/open-source/panda/board/bootstub_declarations.h:16:0: style: The function 'uart_init' is never used. [unusedFunction]
void uart_init(uart_ring *q, int baud) { UNUSED(q); UNUSED(baud); }
^
/home/aryan/Desktop/open-source/panda/board/drivers/can_common.h:200:0: style: The function 'can_set_forwarding' is never used. [unusedFunction]
void can_set_forwarding(uint8_t from, uint8_t to) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/gpio.h:71:0: style: The function 'gpio_set_all_output' is never used. [unusedFunction]
void gpio_set_all_output(const gpio_t *pins, uint8_t num_pins, bool enabled) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/gpio.h:77:0: style: The function 'gpio_set_bitmask' is never used. [unusedFunction]
void gpio_set_bitmask(const gpio_t *pins, uint8_t num_pins, uint32_t bitmask) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/uart.h:154:0: style: The function 'putui' is never used. [unusedFunction]
void putui(uint32_t i) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/watchdog.h:10:0: style: The function 'watchdog_init' is never used. [unusedFunction]
void watchdog_init(WatchdogTimeout timeout) {
^
/home/aryan/Desktop/open-source/panda/board/main.c:34:0: style: The function 'test' is never used. [unusedFunction]
void test(void){}
^
/home/aryan/Desktop/open-source/panda/board/safety.h:110:0: style: The function 'gen_crc_lookup_table_16' is never used. [unusedFunction]
void gen_crc_lookup_table_16(uint16_t poly, uint16_t crc_lut[]) {
^
/home/aryan/Desktop/open-source/panda/board/safety/safety_hyundai_common.h:90:0: style: The function 'hyundai_common_canfd_compute_checksum' is never used. [unusedFunction]
uint32_t hyundai_common_canfd_compute_checksum(const CANPacket_t *to_push) {
^
/home/aryan/Desktop/open-source/panda/board/stm32fx/lluart.h:48:0: style: The function 'uart_send_break' is never used. [unusedFunction]
void uart_send_break(uart_ring *u) {
^
/home/aryan/Desktop/open-source/panda/board/stm32fx/lluart.h:81:0: style: The function 'USART2_IRQ_Handler' is never used. [unusedFunction]
void USART2_IRQ_Handler(void) { uart_interrupt_handler(&uart_ring_debug); }

cppcheck --enable=unusedFunction --quiet -DUID_BASE -DPANDA -DSTM32H7 $PANDA_DIR/board/ generates

** UNUSED ALL CODE **
/home/aryan/Desktop/open-source/panda/board/jungle/main.c:169:3: error: There is an unknown macro here somewhere. Configuration is required. If REGISTER_INTERRUPT is a macro then please configure it. [unknownMacro]
  REGISTER_INTERRUPT(TICK_TIMER_IRQ, tick_handler, 10U, FAULT_INTERRUPT_RATE_TICK)
  ^
/home/aryan/Desktop/open-source/panda/board/drivers/can_common.h:200:0: style: The function 'can_set_forwarding' is never used. [unusedFunction]
void can_set_forwarding(uint8_t from, uint8_t to) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/gpio.h:71:0: style: The function 'gpio_set_all_output' is never used. [unusedFunction]
void gpio_set_all_output(const gpio_t *pins, uint8_t num_pins, bool enabled) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/gpio.h:77:0: style: The function 'gpio_set_bitmask' is never used. [unusedFunction]
void gpio_set_bitmask(const gpio_t *pins, uint8_t num_pins, uint32_t bitmask) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/uart.h:154:0: style: The function 'putui' is never used. [unusedFunction]
void putui(uint32_t i) {
^
/home/aryan/Desktop/open-source/panda/board/drivers/watchdog.h:10:0: style: The function 'watchdog_init' is never used. [unusedFunction]
void watchdog_init(WatchdogTimeout timeout) {
^
/home/aryan/Desktop/open-source/panda/board/main.c:34:0: style: The function 'test' is never used. [unusedFunction]
void test(void){}
^
/home/aryan/Desktop/open-source/panda/board/stm32h7/lldac.h:1:0: style: The function 'dac_init' is never used. [unusedFunction]
void dac_init(DAC_TypeDef *dac, uint8_t channel, bool dma) {
^
/home/aryan/Desktop/open-source/panda/board/stm32h7/lldac.h:30:0: style: The function 'dac_set' is never used. [unusedFunction]
void dac_set(DAC_TypeDef *dac, uint8_t channel, uint32_t value) {
^

I guess we can add both cases to our misra tests since they generate slightly different results.