在用于实现CRC的自动生成HAL代码中,我具有以下功能: uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
{
uint32_t index; /* CRC input data buffer index */
uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
/* Change CRC peripheral state */
hcrc->State = HAL_CRC_STATE_BUSY;
switch (hcrc->InputDataFormat)
{
case CRC_INPUTDATA_FORMAT_WORDS:
/* Enter Data to the CRC calculator */
for (index = 0U; index < BufferLength; index++)
{
hcrc->Instance->DR = pBuffer[index];
}
temp = hcrc->Instance->DR;
break;
case CRC_INPUTDATA_FORMAT_BYTES:
temp = CRC_Handle_8(hcrc, (uint8_t *)pBuffer, BufferLength);
break;
case CRC_INPUTDATA_FORMAT_HALFWORDS:
temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
break;
default:
break;
}
/* Change CRC peripheral state */
hcrc->State = HAL_CRC_STATE_READY;
/* Return the CRC computed value */
return temp;
}问题是,我自己的inBuff是uint8_t * inBuff类型的,在自动生成的代码中我可以看到它需要一个uint32_t作为输入,而且在以后,当我为CRC使用CRC_INPUTDATA_FORMAT_BYTES选项时,只需将其类型转换为uint8_t。需要我的uint8_t buff的原因是让它与我的其余代码(相当大的项目)一起工作。有没有理由在不损害我自己的inBuff内容的情况下高效地解决这个问题?它需要正确对齐。
|