[CW32F030系列] 发现一处库函数逻辑错误导致的assert failed

[复制链接]
1199|3
 楼主| abettertmr 发表于 2023-6-7 14:23 | 显示全部楼层 |阅读模式
本帖最后由 abettertmr 于 2023-6-7 18:35 编辑

在cw32f030_gtim.h中第269行发现的一处bug,会导致用GTIM_ITConfig(CW_GTIM1, GTIM_IT_OV, ENABLE)配置通用定时器中断时,出现assert failed
  1. //原代码:
  2. #define IS_GTIM_IT(IT)                          (((IT) & 0xFFFFFD80 == 0x0UL) && ((IT) != 0x0UL))
  3. //其中"&"比"=="的运算优先级低
  4. //更正后:
  5. #define IS_GTIM_IT(IT)                          ((((IT) & 0xFFFFFD80) == 0x0UL) && ((IT) != 0x0UL))
20230607 18:25更贴新发现bug:
  1. //cw32f030_rcc.c:
  2. //原代码:
  3. void RCC_APBPeriphClk_Enable2(uint32_t Periph,FunctionalState NewState)
  4. {
  5.     assert_param(IS_RCC_APB1_PERIPH(Periph));

  6.     if (NewState != DISABLE)
  7.     {
  8.         CW_SYSCTRL->APBEN2 |= Periph;
  9.     }
  10.     else
  11.     {
  12.         CW_SYSCTRL->APBEN2 &= (~Periph);
  13.     }
  14. }
  15. //另一处:
  16. void RCC_APBPeriphReset2(uint32_t Periph,FunctionalState NewState)
  17. {
  18.     assert_param(IS_RCC_APB1_PERIPH(Periph));

  19.     if (NewState != DISABLE)
  20.     {
  21.         CW_SYSCTRL->APBRST2 |= Periph;
  22.     }
  23.     else
  24.     {
  25.         CW_SYSCTRL->APBRST2 &= (~Periph);
  26.     }
  27. }
  28. //以上两处assert_param语句应该为:
  29. assert_param(IS_RCC_APB2_PERIPH(Periph));

pssyx 发表于 2023-6-8 09:41 | 显示全部楼层
谢谢指正!
LIB升级正在进行中。
LOVEEVER 发表于 2023-10-19 13:05 | 显示全部楼层
楼主,看来开发应用的功能很齐全
中国龙芯CDX 发表于 2023-11-14 15:06 | 显示全部楼层
真厉害,玩的挺好挺专业
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

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