[单片机芯片]

我让chatGPT帮我优化代码,跟我想的一样

[复制链接]
1619|6
手机看帖
扫描二维码
随时随地手机跟帖
gaoyang9992006|  楼主 | 2023-3-2 08:50 | 显示全部楼层 |阅读模式
以下代码出自CH32V103的库函数,此函数为实现5个不同分支的if elseif else 结构的判断工作,由于判断对象都是常量,因此我认为可以使用switch case 优化这些操作,以便看着更加简洁清爽。
于是我让chatGPT帮我完成这个事情。
我的提问截图
2646963fff25fd577c.png
原始内容
void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct)
{
    uint8_t tmppre = 0;

    if(NVIC_Priority_Group == NVIC_PriorityGroup_0)
    {
        NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4);
    }
    else if(NVIC_Priority_Group == NVIC_PriorityGroup_1)
    {
        if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority == 1)
        {
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
        }
        else
        {
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
        }
    }
    else if(NVIC_Priority_Group == NVIC_PriorityGroup_2)
    {
        if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 1)
        {
            tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (tmppre << 4));
        }
        else
        {
            tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 2));
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (tmppre << 4));
        }
    }
    else if(NVIC_Priority_Group == NVIC_PriorityGroup_3)
    {
        if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 3)
        {
            tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (tmppre << 4));
        }
        else
        {
            tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 4));
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (tmppre << 4));
        }
    }
    else if(NVIC_Priority_Group == NVIC_PriorityGroup_4)
    {
        NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << 4);
    }

    if(NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
    {
        NVIC_EnableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
    }
    else
    {
        NVIC_DisableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
    }
}

chatGPT优化后的
void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct)
{
    uint8_t tmppre = 0;
   
    switch(NVIC_Priority_Group)
    {
        case NVIC_PriorityGroup_0:
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                   NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4);
            break;
        case NVIC_PriorityGroup_1:
            if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority == 1)
                NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                        (1 << 7) |
                        (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
            else
                NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                        (0 << 7) |
                        (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
            break;
        case NVIC_PriorityGroup_2:
            if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 1)
            {
                tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
                      (4 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
                NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                        (0 << 7) | (tmppre << 4));
            }
            else
            {
                tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
                       (4 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 2));
                NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                        (1 << 7) | (tmppre << 4));
            }
            break;
        case NVIC_PriorityGroup_3:
            if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 3)
            {
                tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
                       (2 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
                NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                        (0 << 7) | (tmppre << 4));
            }
            else
            {
                tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
                       (2 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 4));
                NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                        (1 << 7) | (tmppre << 4));
            }
            break;
        case NVIC_PriorityGroup_4:
            NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
                    NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << 4);
            break;
    }
   
    if(NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
        NVIC_EnableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
    else
        NVIC_DisableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
}
2607263fff2d9677c8.png

使用特权

评论回复
tpgf| | 2024-5-8 08:28 | 显示全部楼层
switch语句和if语句的优点和缺点相比较都是什么呢

使用特权

评论回复
tpgf| | 2024-5-8 09:34 | 显示全部楼层
ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具

使用特权

评论回复
keaibukelian| | 2024-5-8 10:35 | 显示全部楼层
在OpenAI的官网上,ChatGPT被描述为优化对话的语言模型,是GPT-3.5架构的主力模型。

使用特权

评论回复
renzheshengui| | 2024-5-8 22:51 | 显示全部楼层
ChatGPT的使用上还有局限性,模型仍有优化空间

使用特权

评论回复
paotangsan| | 2024-5-8 23:24 | 显示全部楼层
ChatGPT受到关注的重要原因是引入新技术RLHF

使用特权

评论回复
guanjiaer| | 2024-5-8 23:57 | 显示全部楼层
现在gpt对代码的优化还能一直免费使用吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1905

主题

15674

帖子

200

粉丝