⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssp_u64.c

📁 abstract rtos
💻 C
字号:
#ifdef __cplusplusextern "C"{#endif#include "syscfg.h"#include "aos.h"#define MASK_BITALLMASK  0xFFFFFFFF#define MASK_BIT32MASK   0x80000000#define MASK_BIT01MASK   0x00000001#define MASK_BITNMASK(x) (MASK_BITALLMASK << (32 - (x)))U32 aos_u64_mul32( U64 *pU64, U32 u32bit ){    U64 value;    U64 tmpval;    U32 count;    U32 xbit;    U32 record;    if (NULL == pU64)    {        return AOS_FAIL;    }    value.ulHigh = 0;    value.ulLow  = 0;    for (count = 31, xbit = MASK_BIT32MASK;         count > 0;  xbit >>= 1, count--)    {        if (u32bit & xbit)        {            record = pU64->ulLow & MASK_BITNMASK(count);            record >>= (32-count);            tmpval.ulHigh = (pU64->ulHigh << count) | record;            tmpval.ulLow  = pU64->ulLow << count;            AOS_U64_ADD64(&value, &tmpval);        }    }    if (u32bit & MASK_BIT01MASK)    {        AOS_U64_ADD64(&value, pU64);    }    *pU64 = value;        return AOS_SUCC;    }U32 aos_u64_div32( U64 *pU64, U32 u32bit ){    U64 value;    U32 tmp;    U32 tmphi0;    U32 tmphi1;    U32 tmplo0;    U32 tmplo1;    if((NULL == pU64) || (0 == u32bit))    {        return AOS_FAIL;    }    if (pU64->ulHigh >= u32bit)    {        value.ulHigh = pU64->ulHigh/u32bit;        tmp = pU64->ulHigh%u32bit;    }    else    {        value.ulHigh = 0;        tmp = pU64->ulHigh;    }    tmphi0 = U32_BUTT/u32bit;    tmphi1 = U32_BUTT%u32bit;    tmplo0 = pU64->ulLow/u32bit;    tmplo1 = pU64->ulLow%u32bit;    value.ulLow  = tmphi0*tmp + tmplo0;    value.ulLow += ((tmphi1 + 1)*tmp + tmplo1)/u32bit;    if (((tmphi1 + 1)*tmp + tmplo1)%u32bit >= u32bit/2)    {        value.ulLow += 1;    }        *pU64 = value;        return AOS_SUCC;    }U32 aos_u64_div32revise( U64 *pU64, U32 u32bit, U32*pulReviseVal ){    U64 value;    U32 tmp;    U32 tmphi0;    U32 tmphi1;    U32 tmplo0;    U32 tmplo1;    if (NULL == pU64 || 0 == u32bit)    {        return AOS_FAIL;    }    if (pU64->ulHigh >= u32bit)    {        value.ulHigh = pU64->ulHigh/u32bit;        tmp = pU64->ulHigh%u32bit;    }    else    {        value.ulHigh = 0;        tmp = pU64->ulHigh;    }    tmphi0 = U32_BUTT/u32bit;    tmphi1 = U32_BUTT%u32bit;    tmplo0 = pU64->ulLow/u32bit;    tmplo1 = pU64->ulLow%u32bit;    value.ulLow  = tmphi0*tmp + tmplo0;    value.ulLow += ((tmphi1 + 1)*tmp + tmplo1)/u32bit;    if (NULL != pulReviseVal)    {        *pulReviseVal = ((tmphi1 + 1)*tmp + tmplo1)%u32bit;    }    *pU64 = value;        return AOS_SUCC;    }U32 aos_u64_div64( U64 *pU64_N, U64 *pU64_M ){    U64 result = {0,0};    U64 temp[64];    U64 tmp;    U32 i;    if(NULL == pU64_N || NULL == pU64_M)    {        return AOS_FAIL;    }    if((0 == pU64_M->ulHigh) &&        (0 == pU64_M->ulLow))    {        return AOS_FAIL;    }    if(AOS_U64_COMPARE(pU64_N,pU64_M) < 0)    {        pU64_N->ulHigh = 0;        pU64_N->ulLow = 0;                return AOS_SUCC;    }    tmp = *pU64_M;    for(i = 0; i < 64; i++)    {        temp[i] = tmp;		AOS_U64_LSH(&tmp); 		if(AOS_U64_COMPARE(&tmp,pU64_N) > 0)        {            i++;            break;        }        		if(AOS_U64_COMPARE(&temp[i],&tmp) > 0)        {            i++;            break;        }    }    for( ;i > 0;i--)    {        if(AOS_U64_COMPARE(&temp[i-1],pU64_N) <= 0)        {            AOS_U64_SUB64(pU64_N,&temp[i-1]);            if(i > 32)            {                result.ulHigh |= (0x01 <<(i - 32 -1));            }            else            {                result.ulLow |= (0x01 << (i - 1));            }        }    }	*pU64_N = result;    return AOS_SUCC;    }#ifdef __cplusplus}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -