[单片机芯片] 我让chatGPT帮我优化代码,跟我想的一样

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

  4.     if(NVIC_Priority_Group == NVIC_PriorityGroup_0)
  5.     {
  6.         NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4);
  7.     }
  8.     else if(NVIC_Priority_Group == NVIC_PriorityGroup_1)
  9.     {
  10.         if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority == 1)
  11.         {
  12.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
  13.         }
  14.         else
  15.         {
  16.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
  17.         }
  18.     }
  19.     else if(NVIC_Priority_Group == NVIC_PriorityGroup_2)
  20.     {
  21.         if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 1)
  22.         {
  23.             tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
  24.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (tmppre << 4));
  25.         }
  26.         else
  27.         {
  28.             tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 2));
  29.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (tmppre << 4));
  30.         }
  31.     }
  32.     else if(NVIC_Priority_Group == NVIC_PriorityGroup_3)
  33.     {
  34.         if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 3)
  35.         {
  36.             tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
  37.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (tmppre << 4));
  38.         }
  39.         else
  40.         {
  41.             tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 4));
  42.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (tmppre << 4));
  43.         }
  44.     }
  45.     else if(NVIC_Priority_Group == NVIC_PriorityGroup_4)
  46.     {
  47.         NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << 4);
  48.     }

  49.     if(NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
  50.     {
  51.         NVIC_EnableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
  52.     }
  53.     else
  54.     {
  55.         NVIC_DisableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
  56.     }
  57. }

chatGPT优化后的
  1. void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct)
  2. {
  3.     uint8_t tmppre = 0;
  4.    
  5.     switch(NVIC_Priority_Group)
  6.     {
  7.         case NVIC_PriorityGroup_0:
  8.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  9.                    NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4);
  10.             break;
  11.         case NVIC_PriorityGroup_1:
  12.             if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority == 1)
  13.                 NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  14.                         (1 << 7) |
  15.                         (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
  16.             else
  17.                 NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  18.                         (0 << 7) |
  19.                         (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4));
  20.             break;
  21.         case NVIC_PriorityGroup_2:
  22.             if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 1)
  23.             {
  24.                 tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
  25.                       (4 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
  26.                 NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  27.                         (0 << 7) | (tmppre << 4));
  28.             }
  29.             else
  30.             {
  31.                 tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
  32.                        (4 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 2));
  33.                 NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  34.                         (1 << 7) | (tmppre << 4));
  35.             }
  36.             break;
  37.         case NVIC_PriorityGroup_3:
  38.             if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 3)
  39.             {
  40.                 tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
  41.                        (2 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority);
  42.                 NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  43.                         (0 << 7) | (tmppre << 4));
  44.             }
  45.             else
  46.             {
  47.                 tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority +
  48.                        (2 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 4));
  49.                 NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  50.                         (1 << 7) | (tmppre << 4));
  51.             }
  52.             break;
  53.         case NVIC_PriorityGroup_4:
  54.             NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel,
  55.                     NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << 4);
  56.             break;
  57.     }
  58.    
  59.     if(NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
  60.         NVIC_EnableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
  61.     else
  62.         NVIC_DisableIRQ(NVIC_InitStruct->NVIC_IRQChannel);
  63. }
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对代码的优化还能一直免费使用吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部