优化代码 /* 解析头部 */ case SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_HEAD: if (data == DEF_SERIAL_PROTOCOL0_HEAD) { pfm_ctr_blk->Count = 0; pfm_ctr_blk->Status = SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_LEN; } break; /* 解析长度 */ case SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_LEN: pfm_ctr_blk->temp[pfm_ctr_blk->Count++] = data; if ((pfm_ctr_blk->Count & DEF_SERIAL_PROTOCOL0_HEAD) == 2) { pfm_ctr_blk->Count = 0; pfm_pkge->Length = pfm_ctr_blk->temp[1]<<8 | pfm_ctr_blk->temp[0]; /* 长度效验 */ if (pfm_pkge->Length > pfm_pkge->BufLen-1) { DEF_SERIAL_PROTOCOL0_CORE_ERROR("len error! = %d", pfm_pkge->Length); SERIAL_Protocol0Clear(pframe_buffer); } else { pfm_ctr_blk->Status = SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_CMD; } } break;
时间: 2023-08-15 20:07:13 浏览: 98
这段代码的判断语句 `(pfm_ctr_blk->Count & DEF_SERIAL_PROTOCOL0_HEAD) == 2` 可以使用位运算符 `&` 和常量 `DEF_SERIAL_PROTOCOL0_HEAD - 1` 来替代,从而提高代码的可读性和可维护性。此外,对于一些常量,也可以使用宏定义来提高代码的可维护性。下面是优化后的代码:
```c
// 宏定义
#define HEAD_MASK (DEF_SERIAL_PROTOCOL0_HEAD - 1)
/* 解析头部 */
case SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_HEAD:
if (data == DEF_SERIAL_PROTOCOL0_HEAD) {
pfm_ctr_blk->Count = 0;
pfm_ctr_blk->Status = SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_LEN;
}
break;
/* 解析长度 */
case SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_LEN:
pfm_ctr_blk->temp[pfm_ctr_blk->Count++] = data;
if ((pfm_ctr_blk->Count & HEAD_MASK) == 2) { // 使用位运算符 & 和常量 HEAD_MASK 替代原来的比较操作
pfm_ctr_blk->Count = 0;
pfm_pkge->Length = (pfm_ctr_blk->temp[1] << 8) | pfm_ctr_blk->temp[0];
/* 长度效验 */
if (pfm_pkge->Length > pfm_pkge->BufLen - 1) {
DEF_SERIAL_PROTOCOL0_CORE_ERROR("len error! = %d", pfm_pkge->Length);
SERIAL_Protocol0Clear(pframe_buffer);
} else {
pfm_ctr_blk->Status = SERIAL_PROTOCOL0_RECEIVE_TYPE_SRATUS_CMD;
}
}
break;
```
在优化后的代码中,我们使用了一个常量 `HEAD_MASK`,将其赋值为 `DEF_SERIAL_PROTOCOL0_HEAD - 1`,用来判断 `Count` 是否为 2。使用位运算符 `&` 来判断 `Count` 的值是否为 2,从而代替了原来的比较操作。这样做的好处是,使用位运算符可以提高代码的效率,并且使代码更加简洁和易读。另外,我们还将一些常量进行了宏定义,提高了代码的可维护性。
阅读全文