#define HID_KEYBOARD_REPORT_DESC_SIZE \ sizeof(gu8KeyboardReportDesc) / sizeof(gu8KeyboardReportDesc[0]) const uint32_t gu32KeyboardReportDescSize = HID_KEYBOARD_REPORT_DESC_SIZE;
时间: 2023-10-05 09:14:44 浏览: 37
这段代码定义了一个名为`HID_KEYBOARD_REPORT_DESC_SIZE`的宏,用于表示HID键盘设备报告描述符的大小。宏的定义使用了`sizeof`函数,计算了`gu8KeyboardReportDesc`数组的大小,即该数组包含元素的个数,除以每个元素的字节数(`sizeof(gu8KeyboardReportDesc[0])`),得出了该数组的总字节数。这个宏表示了HID键盘设备报告描述符的大小,可以在使用该设备时进行参考。
除此之外,还定义了一个名为`gu32KeyboardReportDescSize`的变量,用于存储HID键盘设备报告描述符的大小,其值为上述宏`HID_KEYBOARD_REPORT_DESC_SIZE`计算得出的结果。这个变量可以在程序中被访问和使用。
相关问题
uint32_t update_crc_32(const uint8_t* Crc_DataPtr, uint32_t Crc_Length, uint32_t Crc_StartValue32, bool Crc_IsFirstCall) 函数实现,计算124Ks数据举例
好的,这里给出一个基于标准CRC-32算法的实现:
```
#define CRC32_POLYNOMIAL 0xEDB88320
uint32_t update_crc_32(const uint8_t* Crc_DataPtr, uint32_t Crc_Length, uint32_t Crc_StartValue32, bool Crc_IsFirstCall)
{
static uint32_t Crc_Table[256];
static bool Crc_Table_Initialized = false;
uint32_t Crc_Reg = Crc_StartValue32;
uint32_t Crc_Table_Index, Crc_Data_Index;
uint8_t Crc_Data;
if (!Crc_Table_Initialized || Crc_IsFirstCall)
{
// 初始化CRC表
for (Crc_Table_Index = 0; Crc_Table_Index < 256; ++Crc_Table_Index)
{
uint32_t Crc_Table_Entry = Crc_Table_Index;
for (int Bit_Index = 0; Bit_Index < 8; ++Bit_Index)
{
if (Crc_Table_Entry & 1)
{
Crc_Table_Entry = (Crc_Table_Entry >> 1) ^ CRC32_POLYNOMIAL;
}
else
{
Crc_Table_Entry >>= 1;
}
}
Crc_Table[Crc_Table_Index] = Crc_Table_Entry;
}
Crc_Table_Initialized = true;
}
for (Crc_Data_Index = 0; Crc_Data_Index < Crc_Length; ++Crc_Data_Index)
{
Crc_Data = Crc_DataPtr[Crc_Data_Index];
Crc_Reg = Crc_Table[(Crc_Reg ^ Crc_Data) & 0xFF] ^ (Crc_Reg >> 8);
}
return Crc_Reg;
}
int main()
{
uint8_t data[124 * 1024]; // 124K数据
uint32_t crc = update_crc_32(data, sizeof(data), 0xFFFFFFFF, true);
printf("CRC-32: %08X\n", crc ^ 0xFFFFFFFF);
return 0;
}
```
这里使用了一个静态变量 `Crc_Table` 来存储CRC表,以减少重复计算。另外,参数 `Crc_IsFirstCall` 被用来指示是否是第一次调用该函数,如果是则需要初始化CRC表。最后,输出的CRC值需要和 `0xFFFFFFFF` 取异或才是最终的CRC值。
优化下面代码uint8 CalucateVoltageData(uint8* pSrc) { uint8 tx[] = { 0x32,0xA8,0x00,0x03,0xFF }; uint16 len = sizeof(tx) / sizeof(uint8); tx[len - 1]&=ChkSum((uint8*)tx, len - 1); char rx[100] = {0}; uint32 YC_V[3]={0}; SpiDev_Xfer(SPIDEV_MCHIP,(const char*) tx,rx, 12); for (int n = 0; n < 3; n++) { memcpy((uint8*)&YC_V[0] + 4 * n, rx + 4 * n, 4); } YC_V[0]*=10; YC_V[1]*=10; YC_V[2]*=10; for (int n = 0; n < 3; n++) { memcpy(pSrc + 4 * n, (uint8*)&YC_V[n], 4); } return GAL_YES; }
以下是优化代码的建议:
1. 减少内存拷贝
可以避免使用中间变量rx,直接将spi传输的数据拷贝到pSrc中。
2. 减少循环次数
可以将两个循环合并为一个,同时避免使用memcpy。
3. 避免使用魔法数字
可以将0x32,0xA8,0x00,0x03,0xFF定义为宏或常量,提高代码可读性。
下面是优化后的代码:
#define CMD_LEN 5
#define DATA_LEN 12
#define CMD_HEADER 0x32
#define CMD_TYPE 0xA8
#define CMD_DATA_LEN 0x03
#define CMD_TAIL 0xFF
uint8 CalucateVoltageData(uint8* pSrc) {
uint8 tx[CMD_LEN + CMD_DATA_LEN];
tx[0] = CMD_HEADER;
tx[1] = CMD_TYPE;
tx[2] = 0x00;
tx[3] = CMD_DATA_LEN;
tx[4] = CMD_TAIL;
tx[CMD_LEN] = ChkSum((uint8*)tx, CMD_LEN);
uint32 YC_V[3] = {0};
SpiDev_Xfer(SPIDEV_MCHIP, (const char*)tx, (char*)pSrc, DATA_LEN);
for (int n = 0; n < 3; n++) {
YC_V[n] = ((uint32)pSrc[4 * n] << 24) | ((uint32)pSrc[4 * n + 1] << 16)
| ((uint32)pSrc[4 * n + 2] << 8) | pSrc[4 * n + 3];
YC_V[n] *= 10;
}
memcpy(pSrc, YC_V, sizeof(YC_V));
return GAL_YES;
}
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)