nrf5340单片机中整型乘以浮点型导致的死循环

举例:


void angleTime( uint16_t rx, uint16_t ry, uint16_t outR, uint16_t inR, uint16_t innR, uint32_t color, uint8_t min )
{
    uint16_t x, y, x1, y1;
    GUI_SetColor( color );
    GUI_SetPenSize(3);
    int oldFactor = GUI_AA_GetFactor();
    GUI_AA_SetFactor(2);
    for ( uint8_t i = 1; i <= min + 1; i++ )
    {
        float a = (i * 6) * 3.1415926 / 180;

        x = rx + outR * sin( a );
        y = ry - outR * cos( a );
        if ( i % 5 == 0 ) {
            x1 = rx + innR * sin( a );
            y1 = ry - innR * cos( a );
        }
        else {
            x1 = rx + inR * sin( a );
            y1 = ry - inR * cos( a );
        }

        GUI_AA_DrawLine( x, y, x1, y1 );
    }

    GUI_AA_SetFactor(oldFactor);
    GUI_SetPenSize(1);
}

//出现(uint8_t)(timeOut * scrollStep) - 1)= -1 的情况(在debug模式下查看就是等于255)导致数据溢出造成死循环
int main()
{
    if (timeOut) {
        angleTime(rr, rr, rr - 1, rr - 10, rr - 15, 0xFF564D, (uint8_t)(timeOut *             
                  scrollStep) - 1);
    }
}


发现过程:

在ozone状态下调试,从进入angleTime函数之后就一直出不来,

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值