打印
[CW32F030系列]

发现一处库函数逻辑错误导致的assert failed

[复制链接]
721|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
//原代码:
#define IS_GTIM_IT(IT)                          (((IT) & 0xFFFFFD80 == 0x0UL) && ((IT) != 0x0UL))
//其中"&"比"=="的运算优先级低
//更正后:
#define IS_GTIM_IT(IT)                          ((((IT) & 0xFFFFFD80) == 0x0UL) && ((IT) != 0x0UL))
20230607 18:25更贴新发现bug:
//cw32f030_rcc.c:
//原代码:
void RCC_APBPeriphClk_Enable2(uint32_t Periph,FunctionalState NewState)
{
    assert_param(IS_RCC_APB1_PERIPH(Periph));

    if (NewState != DISABLE)
    {
        CW_SYSCTRL->APBEN2 |= Periph;
    }
    else
    {
        CW_SYSCTRL->APBEN2 &= (~Periph);
    }
}
//另一处:
void RCC_APBPeriphReset2(uint32_t Periph,FunctionalState NewState)
{
    assert_param(IS_RCC_APB1_PERIPH(Periph));

    if (NewState != DISABLE)
    {
        CW_SYSCTRL->APBRST2 |= Periph;
    }
    else
    {
        CW_SYSCTRL->APBRST2 &= (~Periph);
    }
}
//以上两处assert_param语句应该为:
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

粉丝