4个职位/ 0个新职位
最后发表
lianghuok2
离线
最后看到:2年8个月前
加入:2016-05-30 17
关于CRC校验功能怎么使用

今天看了一下5.150的代码没找到有CRC校验的,后面从3.70里面看到有疑似CRC的代码。
static void app_neb_msg_tx_insert_CRC(uint8_t * p_params, uint16_t length)
Static bool app_neb_msg_crc_check(uint8_t * p_params, uint16_t长度)

1)这两个是CRC校验的吗?
3)怎么使用?

关键词:
设备:
Gongyu_Dialog
离线
最后看到:1周2天前
加入:2016-04-27 07:07
看你CRC是怎么定义的。像OTA里面是用字节异或的方式。

看你CRC是怎么定义的。像OTA里面是用字节异或的方式。
而你提到的两个函数,是采用字节加的方式。

lianghuok2
离线
最后看到:2年8个月前
加入:2016-05-30 17
我看了下CRC的代码。有2个疑问

我看了下CRC的代码。有2个疑问
我看到两个指针都分别要减去uint8_t和uint16_t的字节数

1)第一个疑问:
static void app_neb_msg_tx_insert_CRC(uint8_t * p_params, uint16_t length)

Uint8_t CRC = 0x00;
Uint8_t * p_crc = p_params + length - sizeof(Uint8_t);
Uint8_t * p_start = p_params - sizeof(uint16_t);

//将所有字节添加到包中
而(p_start < p_crc)

crc + = * (p_start + +);

/ / 1 s补
crc = ~ crc;

* p_crc = crc;

是不是指针p_params指向的内存字节段长为长度,最后一位要包括一个字节的CRC。
所以p_crc就等于p_params + length-sizeof (uint8_t) ?

2)第二个疑问
Uint8_t * p_start = p_params - sizeof(uint16_t);

p_start指针要从p_params起减掉2个字节。这是要干嘛?
是说p_params前面2个字节的内容也要一起校验吗?

Gongyu_Dialog
离线
最后看到:1周2天前
加入:2016-04-27 07:07
1 .因为GTL的数据格式是,可以查嗯- b - 017

1 .因为GTL的数据格式是,可以查嗯- b - 017

类型(2)/ DST_ID (2) / SRC_ID (2) / PAR_LEN(2) /参数(N)

查看函数app_neb_msg_tx_confirm。里面p_msg指向参数字段的首地址。

所以,
问题1:看到函数app_neb_msg_tx_insert_CRC (p_msg、味精- > param_length + 4)
长度”+ 4只前面3个字节,再加1个字节的CRC放在末尾

问题2对需要加上前面的PAR_LEN(2字节)