该代码是一个车辆挡位显示模块的实现,主要包含三个函数:初始化函数(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");

}

优化建议:

  1. 代码风格: 规范代码风格,增加代码注释,提高代码可读性。
  2. 结构优化: 可以将代码拆分为更小的函数,提高代码模块化,例如将8AT挡位处理逻辑拆分为独立的函数。
  3. 逻辑简化: 代码中存在一些重复的代码,可以考虑使用循环或函数来简化代码逻辑。
  4. 宏定义说明: 解释代码中使用的宏定义,例如 GEAR__nu8Transmission8AT、GEAR__nenTargetGearN 等,方便理解代码逻辑。
  5. 错误处理: 考虑添加错误处理机制,例如对函数返回值进行检查,提高代码健壮性。
  6. 数据结构优化: 可以根据实际需求对数据结构进行优化,例如使用更简洁的数据类型或增加新的成员变量。
  7. 测试: 编写单元测试代码,测试各个函数的功能,确保代码的正确性。

优化后的代码示例 (仅供参考):

// 挡位数据结构体
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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录