车辆挡位显示模块代码分析及优化
该代码是一个车辆挡位显示模块的实现,主要包含三个函数:初始化函数(GEAR_vInit)、换挡符号函数(GEAR_vShiftSymbol)和主函数(GEAR_vMain)。
初始化函数主要是将挡位数据结构体中的各个成员变量初始化。
换挡符号函数根据当前的换挡建议(GEAR__u8GetShiftRecommend)来设置换挡符号的位置(GEAR__nenSymbolUp、GEAR__nenSymbolDown或GEAR__nenSymbolBlank)。
主函数是整个模块的核心,根据当前的挡位、驾驶模式和闪烁信号等信息,设置挡位数据结构体中的各个成员变量,再根据超时标志位(Flg_ShiftRecommend_M_tmout、Flg_Tgtgear_Down_tmout、Flg_Tgtgear_Up_tmout)来清空挡位数据结构体中的成员变量。同时,主函数也会打印出各个成员变量的值,方便调试。
需要注意的是,该代码中有一些宏定义(比如GEAR__nu8Transmission8AT、GEAR__nenTargetGearN等)没有给出具体的定义,需要结合上下文才能理解其含义。
代码示例:
void GEAR_vInit(void) //初始化
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = False;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = 0;
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = 0;
printf("Gear Init\n");
}
void GEAR_vShiftSymbol(void) //8ATshift
{
switch (GEAR__u8GetShiftRecommend())
{
case(GEAR__nenTargetGear1):
{
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolUp;
break;
}
case(GEAR__nenTargetGear2):
{
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolDown;
break;
}
default:
{
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolBlank;
break;
}
}
}
void GEAR_vMain(void)
{
if (EEH_biGetCFG2_Transmission() == GEAR__nu8Transmission8AT) //挡位是8at
{
GEAR_vShiftSymbol(); //换挡的
if (GEAR__u8GetDrvModDisp() == GEAR__nenTargetGearN && GEAR__u8GetDisplayGear() == GEAR__nenTargetGearP)
{
switch (GEAR__u8GetFlashingSignal())
{
case(GEAR__nenTargetGearN):
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearP;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
break;
case(GEAR__nenTargetGear1):
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingP;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
break;
}
}
else if (GEAR__u8GetDrvModDisp() == GEAR__nenTargetGear3)
{
switch (GEAR__u8GetDisplayGear())
{
case(GEAR__nenTargetGear1):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD1;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD1;
}
break;
}
case(GEAR__nenTargetGear2):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD2;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD2;
}
break;
}
case(GEAR__nenTargetGear3):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD3;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD3;
}
break;
}
case(GEAR__nenTargetGear4):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD4;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD4;
}
break;
}
case(GEAR__nenTargetGear5):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD5;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD5;
}
break;
}
case(GEAR__nenTargetGear6):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD6;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD6;
}
break;
}
case(GEAR__nenTargetGear7):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD7;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD7;
}
break;
}
case(GEAR__nenTargetGear8):
{
if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearD8;
}
else if (GEAR__u8GetFlashingSignal() == GEAR__nenTargetGear1)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingD8;
}
break;
}
default:
break;
}
}
else if (GEAR__u8GetDrvModDisp() == GEAR__nenTargetGear2 && GEAR__u8GetDisplayGear() == GEAR__nenTargetGearN)
{
switch (GEAR__u8GetFlashingSignal())
{
case(GEAR__nenTargetGearN):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearN;
break;
}
case(GEAR__nenTargetGear1):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingN;
break;
}
default:
break;
}
}
else if (GEAR__u8GetDrvModDisp() == GEAR__nenTargetGear1 && GEAR__u8GetDisplayGear() == GEAR__nenTargetGearR)
{
switch (GEAR__u8GetFlashingSignal())
{
case(GEAR__nenTargetGearN):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearR;
break;
}
case(GEAR__nenTargetGear1):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = True;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearFlashingR;
break;
}
default:
break;
}
}
else if (GEAR__u8GetDrvModDisp() == GEAR__nenTargetGear4)
{
switch (GEAR__u8GetDisplayGear())
{
case(GEAR__nenTargetGear1):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear1;
break;
}
case(GEAR__nenTargetGear2):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear2;
break;
}
case(GEAR__nenTargetGear3):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear3;
break;
}
case(GEAR__nenTargetGear4):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear4;
break;
}
case(GEAR__nenTargetGear5):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear5;
break;
}
case(GEAR__nenTargetGear6):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear6;
break;
}
case(GEAR__nenTargetGear7):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear7;
break;
}
case(GEAR__nenTargetGear8):
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = True;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGear8;
break;
}
default:
break;
}
}
else
{
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearBlank;
}
}
else if (EEH_biGetCFG2_Transmission() == GEAR__nu8Transmission6MT) //6AT
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = GEAR_nGearBlank;
if (GEAR__u8GetTgtgear_Up() == GEAR__nenTargetGear1 && GEAR__u8GetTgtgear_Down() == GEAR__nenTargetGearN)
{
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolUp;
}
else if ((GEAR__u8GetTgtgear_Up() == GEAR__nenTargetGearN && GEAR__u8GetTgtgear_Down() == GEAR__nenTargetGear1))
{
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolDown;
}
else
{
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolBlank;
}
}
else
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR_nGearBlank;
}
//timeout
if (Flg_ShiftRecommend_M_tmout() || Flg_Tgtgear_Down_tmout() || Flg_Tgtgear_Up_tmout())
{
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = False;
DPOOL_txGEAR_stGearData.GEAR_boGearValid = False;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR__nenSymbolBlank;
printf("timeout");
}
printf("Gear Main\n");
printf("GEAR_GearValid:%d\n", DPOOL_txGEAR_stGearData.GEAR_boGearValid);
printf("GEAR_GearFlashSts:%d\n", DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts);
printf("GEAR_GearPosi:%d\n", DPOOL_txGEAR_stGearData.GEAR_u8GearPosi);
printf("GEAR_ShiftSymbolPosi:%d\n", DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi);
printf("\n");
}
优化建议:
- 代码风格: 规范代码风格,增加代码注释,提高代码可读性。
- 结构优化: 可以将代码拆分为更小的函数,提高代码模块化,例如将8AT挡位处理逻辑拆分为独立的函数。
- 逻辑简化: 代码中存在一些重复的代码,可以考虑使用循环或函数来简化代码逻辑。
- 宏定义说明: 解释代码中使用的宏定义,例如
GEAR__nu8Transmission8AT、GEAR__nenTargetGearN等,方便理解代码逻辑。 - 错误处理: 考虑添加错误处理机制,例如对函数返回值进行检查,提高代码健壮性。
- 数据结构优化: 可以根据实际需求对数据结构进行优化,例如使用更简洁的数据类型或增加新的成员变量。
- 测试: 编写单元测试代码,测试各个函数的功能,确保代码的正确性。
优化后的代码示例 (仅供参考):
// 挡位数据结构体
typedef struct {
bool GEAR_boGearValid; // 挡位是否有效
bool GEAR_boGearFlashSts; // 挡位是否闪烁
uint8_t GEAR_u8GearPosi; // 挡位位置
} GEAR_stGearData;
// 换挡符号数据结构体
typedef struct {
uint8_t GEAR_u8ShiftSymbolPosi; // 换挡符号位置
} GEAR_stShiftSymbolData;
// 全局变量
GEAR_stGearData DPOOL_txGEAR_stGearData;
GEAR_stShiftSymbolData DPOOL_txGEAR_stShiftSymbolData;
// 宏定义
#define GEAR__nu8Transmission8AT 0x01 // 8AT
#define GEAR__nu8Transmission6MT 0x02 // 6MT
#define GEAR__nenTargetGearN 0x00 // N 档
#define GEAR__nenTargetGearP 0x01 // P 档
#define GEAR__nenTargetGearR 0x02 // R 档
#define GEAR__nenTargetGear1 0x03 // 1 档
#define GEAR__nenTargetGear2 0x04 // 2 档
#define GEAR__nenTargetGear3 0x05 // 3 档
#define GEAR__nenTargetGear4 0x06 // 4 档
#define GEAR__nenTargetGear5 0x07 // 5 档
#define GEAR__nenTargetGear6 0x08 // 6 档
#define GEAR__nenTargetGear7 0x09 // 7 档
#define GEAR__nenTargetGear8 0x0A // 8 档
#define GEAR__nenSymbolUp 0x01 // 上升换挡符号
#define GEAR__nenSymbolDown 0x02 // 下降换挡符号
#define GEAR__nenSymbolBlank 0x00 // 空白换挡符号
// 函数声明
uint8_t GEAR__u8GetShiftRecommend(void); // 获取换挡建议
uint8_t GEAR__u8GetDrvModDisp(void); // 获取驾驶模式
uint8_t GEAR__u8GetDisplayGear(void); // 获取显示挡位
uint8_t GEAR__u8GetFlashingSignal(void); // 获取闪烁信号
bool Flg_ShiftRecommend_M_tmout(void); // 换挡建议超时标志
bool Flg_Tgtgear_Down_tmout(void); // 下降挡位超时标志
bool Flg_Tgtgear_Up_tmout(void); // 上升挡位超时标志
bool EEH_biGetCFG2_Transmission(void); // 获取变速箱类型
// 初始化函数
void GEAR_vInit(void)
{
DPOOL_txGEAR_stGearData.GEAR_boGearValid = false;
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = false;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = 0;
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = 0;
printf("Gear Init\n");
}
// 换挡符号函数
void GEAR_vShiftSymbol(void)
{
switch (GEAR__u8GetShiftRecommend())
{
case GEAR__nenTargetGear1:
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolUp;
break;
case GEAR__nenTargetGear2:
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolDown;
break;
default:
DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolBlank;
break;
}
}
// 8AT 挡位处理
void GEAR_vHandle8ATGear(void)
{
GEAR_vShiftSymbol();
// ... 省略具体逻辑 ...
}
// 主函数
void GEAR_vMain(void)
{
if (EEH_biGetCFG2_Transmission() == GEAR__nu8Transmission8AT) {
GEAR_vHandle8ATGear(); // 处理 8AT 挡位
} else if (EEH_biGetCFG2_Transmission() == GEAR__nu8Transmission6MT) {
// 处理 6MT 挡位
} else {
// 其他情况
}
// 超时处理
if (Flg_ShiftRecommend_M_tmout() || Flg_Tgtgear_Down_tmout() || Flg_Tgtgear_Up_tmout()) {
DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts = false;
DPOOL_txGEAR_stGearData.GEAR_boGearValid = false;
DPOOL_txGEAR_stGearData.GEAR_u8GearPosi = GEAR__nenSymbolBlank;
printf("timeout\n");
}
// 打印调试信息
printf("Gear Main\n");
printf("GEAR_GearValid:%d\n", DPOOL_txGEAR_stGearData.GEAR_boGearValid);
printf("GEAR_GearFlashSts:%d\n", DPOOL_txGEAR_stGearData.GEAR_boGearFlashSts);
printf("GEAR_GearPosi:%d\n", DPOOL_txGEAR_stGearData.GEAR_u8GearPosi);
printf("GEAR_ShiftSymbolPosi:%d\n", DPOOL_txGEAR_stShiftSymbolData.GEAR_u8ShiftSymbolPosi);
printf("\n");
}
注意: 代码示例中省略了部分代码逻辑,需要根据实际情况进行补充和修改。
原文地址: https://www.cveoy.top/t/topic/oLfO 著作权归作者所有。请勿转载和采集!