XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
crc32.c 文件参考

XWOS通用库:CRC32 更多...

#include <xwos/standard.h>
#include <xwos/lib/xwbop.h>
#include <xwos/lib/crc32.h>
crc32.c 的引用(Include)关系图:

浏览源代码.

函数

xwer_t soc_crc32_cal (xwu32_t *crc32, bool refin, xwu32_t plynml, xwu32_t direction, const xwu8_t stream[], xwsz_t *size)
 
static void xwlib_crc32_swcal_ls (xwu32_t *crc32, bool refin, const xwu32_t table[], const xwu8_t stream[], xwsz_t *size)
 左移计算一段数据的CRC32校验值(直驱表法)
 
static void xwlib_crc32_swcal_rs (xwu32_t *crc32, bool refin, const xwu32_t table[], const xwu8_t stream[], xwsz_t *size)
 右移计算一段数据的CRC32校验值(直驱表法)
 
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校验值
 
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的查询表
 

详细描述

XWOS通用库:CRC32

作者

在文件 crc32.c 中定义.

函数说明

◆ soc_crc32_cal()

xwer_t soc_crc32_cal ( xwu32_t crc32,
bool  refin,
xwu32_t  plynml,
xwu32_t  direction,
const xwu8_t  stream[],
xwsz_t size 
)
这是这个函数的调用关系图:

◆ xwlib_crc32_swcal()

static xwer_t xwlib_crc32_swcal ( xwu32_t crc32,
bool  refin,
xwu32_t  plynml,
xwu32_t  direction,
const xwu8_t  stream[],
xwsz_t size 
)
static

软件方式计算一段数据的CRC32校验值

参数
[in,out]crc32指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示初始值
  • (O) 作为输出时,返回计算结果
[in]refin是否按位镜像翻转输入的每个字节(xwbop_rbit8)
[in]plynml多项式
[in]direction数据移位的方向
[in]stream指向数据的指针
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据长度
  • (O) 作为输出时,返回剩余未计算的数据长度
返回
错误码
返回值
XWOK没有错误,计算结果有效
-EOPNOTSUPP不支持的多项式

<No error

<No error

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

在文件 crc32.c656 行定义.

659{
660 xwer_t rc;
661
662 // cppcheck-suppress [misra-c2012-16.6]
663 switch (plynml) {
664#if defined(XWLIBCFG_CRC32_0X04C11DB7) && (1 == XWLIBCFG_CRC32_0X04C11DB7)
665 case (xwu32_t)0x04C11DB7:
666 if ((xwu32_t)XWLIB_CRC32_LEFT_SHIFT == direction) {
668 stream, size);
669 } else {
671 stream, size);
672 }
673 rc = XWOK;
674 break;
675#endif
676
677#if defined(XWLIBCFG_CRC32_0XEDB88320) && (1 == XWLIBCFG_CRC32_0XEDB88320)
678 case (xwu32_t)0xEDB88320:
679 if ((xwu32_t)XWLIB_CRC32_RIGHT_SHIFT == direction) {
681 stream, size);
682 } else {
684 stream, size);
685 }
686 rc = XWOK;
687 break;
688#endif
689 default:
690 XWOS_UNUSED(crc32);
691 XWOS_UNUSED(refin);
692 XWOS_UNUSED(plynml);
693 XWOS_UNUSED(direction);
694 XWOS_UNUSED(stream);
695 XWOS_UNUSED(size);
696 rc = -EOPNOTSUPP;
697 break;
698 }
699 return rc;
700}
static void xwlib_crc32_swcal_rs(xwu32_t *crc32, bool refin, const xwu32_t table[], const xwu8_t stream[], xwsz_t *size)
右移计算一段数据的CRC32校验值(直驱表法)
Definition crc32.c:617
static void xwlib_crc32_swcal_ls(xwu32_t *crc32, bool refin, const xwu32_t table[], const xwu8_t stream[], xwsz_t *size)
左移计算一段数据的CRC32校验值(直驱表法)
Definition crc32.c:582
const xwu32_t xwlib_crc32tbl_0xedb88320[256]
CRC32多项式0XEDB88320的查询表
Definition crc32.c:285
const xwu32_t xwlib_crc32tbl_0x04c11db7[256]
CRC32多项式0x04C11DB7的查询表
Definition crc32.c:21
@ XWLIB_CRC32_RIGHT_SHIFT
Definition crc32.h:32
@ XWLIB_CRC32_LEFT_SHIFT
Definition crc32.h:31
#define EOPNOTSUPP
Operation not supported on socket
Definition errno.h:115
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
uint32_t xwu32_t
Definition type.h:266
#define XWOS_UNUSED(x)
Definition standard.h:66
函数调用图:
这是这个函数的调用关系图:

◆ xwlib_crc32_swcal_ls()

static void xwlib_crc32_swcal_ls ( xwu32_t crc32,
bool  refin,
const xwu32_t  table[],
const xwu8_t  stream[],
xwsz_t size 
)
static

左移计算一段数据的CRC32校验值(直驱表法)

参数
[in,out]crc32指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示初始值
  • (O) 作为输出时,返回计算结果
[in]refin是否按位镜像翻转输入的每个字节(xwbop_rbit8)
[in]tableCRC32查询表
[in]stream指向数据的指针
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据长度
  • (O) 作为输出时,返回剩余未计算的数据长度

在文件 crc32.c582 行定义.

585{
586 xwsz_t i;
587 xwu8_t index;
588 xwu8_t byte;
589 xwu32_t remainder = *crc32;
590
591 for (i = 0; i < *size; i++) {
592 if (refin) {
593 byte = xwbop_rbit8(stream[i]);
594 } else {
595 byte = stream[i];
596 }
597 index = ((xwu8_t)(remainder >> (xwu32_t)24) ^ byte);
598 remainder = table[index] ^ (remainder << 8);
599 }
600 *crc32 = remainder;
601 *size = 0;
602}
unsigned long xwsz_t
Definition type.h:339
uint8_t xwu8_t
Definition type.h:194
xwu8_t xwbop_rbit8(xwu8_t x)
函数调用图:
这是这个函数的调用关系图:

◆ xwlib_crc32_swcal_rs()

static void xwlib_crc32_swcal_rs ( xwu32_t crc32,
bool  refin,
const xwu32_t  table[],
const xwu8_t  stream[],
xwsz_t size 
)
static

右移计算一段数据的CRC32校验值(直驱表法)

参数
[in,out]crc32指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示初始值
  • (O) 作为输出时,返回计算结果
[in]refin是否按位镜像翻转输入的每个字节(xwbop_rbit8)
[in]tableCRC32查询表
[in]stream指向数据的指针
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据长度
  • (O) 作为输出时,返回剩余未计算的数据长度

在文件 crc32.c617 行定义.

620{
621 xwsz_t i;
622 xwu8_t index;
623 xwu8_t byte;
624 xwu32_t remainder = *crc32;
625
626 for (i = 0; i < *size; i++) {
627 if (refin) {
628 byte = xwbop_rbit8(stream[i]);
629 } else {
630 byte = stream[i];
631 }
632 index = ((xwu8_t)(remainder & (xwu32_t)0xFF) ^ byte);
633 remainder = table[index] ^ (remainder >> 8);
634 }
635 *crc32 = remainder;
636 *size = 0;
637}
函数调用图:
这是这个函数的调用关系图: