XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
CRC32 的协作图:

枚举

enum  xwlib_crc32_shift_direction_em { XWLIB_CRC32_LEFT_SHIFT , XWLIB_CRC32_RIGHT_SHIFT }
 计算CRC32的移位方向枚举 更多...
 

函数

xwer_t xwlib_crc32_cal (xwu32_t *crc32, xwu32_t xorout, bool refin, bool refout, xwu32_t plynml, xwu32_t direction, const xwu8_t stream[], xwsz_t *size)
 计算一段数据的CRC32校验值
 
xwu32_t xwlib_crc32_calms (const xwu8_t stream[], xwsz_t *size)
 用主流CRC32参数模型计算一段数据的校验值
 

变量

const xwu32_t xwlib_crc32tbl_0x04c11db7 [256]
 CRC32多项式0x04C11DB7的查询表
 
const xwu32_t xwlib_crc32tbl_0xedb88320 [256]
 CRC32多项式0XEDB88320的查询表
 

详细描述

枚举类型说明

◆ xwlib_crc32_shift_direction_em

计算CRC32的移位方向枚举

枚举值
XWLIB_CRC32_LEFT_SHIFT 

左移

XWLIB_CRC32_RIGHT_SHIFT 

右移

在文件 crc32.h30 行定义.

30 {
33};
@ XWLIB_CRC32_RIGHT_SHIFT
Definition crc32.h:32
@ XWLIB_CRC32_LEFT_SHIFT
Definition crc32.h:31

函数说明

◆ xwlib_crc32_cal()

xwer_t xwlib_crc32_cal ( xwu32_t crc32,
xwu32_t  xorout,
bool  refin,
bool  refout,
xwu32_t  plynml,
xwu32_t  direction,
const xwu8_t  stream[],
xwsz_t size 
)

计算一段数据的CRC32校验值

参数
[in,out]crc32指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示初始值
  • (O) 作为输出时,返回计算结果,当计算失败时,值不会发生改变
[in]xorout与结果异或的值
[in]refin是否按位镜像翻转输入的每个字节(xwbop_rbit8)
[in]refout是否按位镜像翻转输出(xwbop_rbit32)
[in]plynml多项式,取值:
  • 0x04C11DB7
  • 0xEDB88320
[in]direction数据移位的方向
[in]stream指向数据的指针
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据长度
  • (O) 作为输出时,返回剩余未计算的数据长度,当返回不为0时, 表示计算未完成,计算结果不会镜像翻转,也不会与xorout异或。
返回
错误码
返回值
XWOK没有错误,计算结果有效
-EFAULT空指针
-EOPNOTSUPP不支持的多项式

<No error

在文件 crc32.c703 行定义.

707{
708 xwer_t rc;
709 xwsz_t total;
710 xwsz_t pos;
711 xwu32_t res;
712
713 XWOS_VALIDATE((crc32), "nullptr", -EFAULT);
714 XWOS_VALIDATE((size), "nullptr", -EFAULT);
715
716 total = *size;
717 res = *crc32;
718 pos = 0;
719 /* 使用硬件计算部分CRC32校验值 */
720 rc = soc_crc32_cal(&res, refin, plynml, direction, &stream[0], size);
721 if (*size > 0) {
722 /* 使用软件计算剩余部分的CRC32校验值 */
723 pos = total - *size;
724 rc = xwlib_crc32_swcal(&res,
725 refin, plynml, direction,
726 &stream[pos], size);
727 pos = total - *size;
728 }
729 if (XWOK == rc) {
730 if (0 == *size) {
731 if (refout) {
732 res = xwbop_rbit32(res);
733 }
734 res = res ^ xorout;
735 }
736 *crc32 = res;
737 }
738 return rc;
739}
xwer_t soc_crc32_cal(xwu32_t *crc32, bool refin, xwu32_t plynml, xwu32_t direction, const xwu8_t stream[], xwsz_t *size)
static xwer_t xwlib_crc32_swcal(xwu32_t *crc32, bool refin, xwu32_t plynml, xwu32_t direction, const xwu8_t stream[], xwsz_t *size)
软件方式计算一段数据的CRC32校验值
Definition crc32.c:656
#define EFAULT
Bad address
Definition errno.h:44
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
unsigned long xwsz_t
Definition type.h:339
uint32_t xwu32_t
Definition type.h:266
xwu32_t xwbop_rbit32(xwu32_t x)
#define XWOS_VALIDATE(exp, errstr,...)
检查函数参数是否有效
Definition standard.h:76
函数调用图:
这是这个函数的调用关系图:

◆ xwlib_crc32_calms()

xwu32_t xwlib_crc32_calms ( const xwu8_t  stream[],
xwsz_t size 
)

用主流CRC32参数模型计算一段数据的校验值

参数
[in]stream指向数据的指针
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据长度
  • (O) 作为输出时,返回剩余未计算的数据长度
返回
CRC32
注解
  • 主流CRC32参数模型:
    • 多项式:0xEDB88320
    • 初始值:0xFFFFFFFF
    • 数据移位方向:右移
    • 是否按位镜像翻转输入:否
    • 是否按位镜像翻转输出:否
    • 与结果进行异或计算:0xFFFFFFFF
  • 主流CRC32参数的镜像模型:
    • 多项式:0x04C11DB7
    • 初始值:0xFFFFFFFF
    • 数据移位方向:左移
    • 是否按位镜像翻转输入:是
    • 是否按位镜像翻转输出:是
    • 与结果进行异或计算:0xFFFFFFFF
  • 上面两个模型计算结果是一致的;
  • 本算法优先使用硬件加速运算,但某些平台的硬件可能有字节数的要求 (例如STM32要求字节数为4的倍数),多余的字节再采用软件计算;
  • 本软件算法使用的是直驱表法。

在文件 crc32.c742 行定义.

743{
744 xwu32_t result;
745
746 result = (xwu32_t)0xFFFFFFFF;
747 // cppcheck-suppress [misra-c2012-17.7]
748 xwlib_crc32_cal(&result, (xwu32_t)0xFFFFFFFF, false, false,
749 (xwu32_t)0xEDB88320, XWLIB_CRC32_RIGHT_SHIFT,
750 stream, size);
751 return result;
752}
xwer_t xwlib_crc32_cal(xwu32_t *crc32, xwu32_t xorout, bool refin, bool refout, xwu32_t plynml, xwu32_t direction, const xwu8_t stream[], xwsz_t *size)
计算一段数据的CRC32校验值
Definition crc32.c:703
函数调用图:

变量说明

◆ xwlib_crc32tbl_0x04c11db7

const xwu32_t xwlib_crc32tbl_0x04c11db7[256]
extern

CRC32多项式0x04C11DB7的查询表

在文件 crc32.c21 行定义.

◆ xwlib_crc32tbl_0xedb88320

const xwu32_t xwlib_crc32tbl_0xedb88320[256]
extern

CRC32多项式0XEDB88320的查询表

在文件 crc32.c285 行定义.