第2種方式可以明確的知道lin_cmd_t是uint8_t 佔用一個byte,第一種方式在不同的編譯器可能會變成2個byte. 第1種方式 typedef enum { SIGNAL = 0x01 }lin_cmd_t; 和 第2種方式 typedef uint8_t lin_cmd_t; enum { SIGNAL = 0x01 }; const lin_rx_cmd_t scheduleTable[] = { //Command, Type, TX/RX Length, Data Address {SIGNAL, RECEIVE, 8U, SIGNAL_Data } };
新增 found flag,找不到就返回,原本找不到會提供最後一個值。 void LIN_queuePacket(uint8_t cmd) { bool found = false; const lin_rx_cmd_t *tempSchedule = LIN_rxCommand; // copy table pointer so we can modify it cmd &= 0x3F; // clear possible parity bits for (uint8_t i = 0U; i < LIN_rxCommandLength; i++) { if (cmd == tempSchedule->cmd) { found = true; break; } tempSchedule++; // go to next entry } // 找不到就返回 if (found == false) { return; } LIN_packet.type = tempSchedule->type; LIN_packet.length = tempSchedule->length; // Build Packet - User defined data // add data memcpy(LIN_packet.data, tempSchedule->data, LIN_packet.length); // Add Checksum LIN_packet.checksum = LIN_getChecksum(LIN_packet.length, LIN_packet.PID, LIN_packet.data); LIN_sendP...