Browse Source

【主线待合】modbus的crc16软件校验

master
Lizongdi 3 days ago
parent
commit
626948cfd5
  1. 27
      library/common/common.c
  2. 1
      library/common/include/common.h

27
library/common/common.c

@ -103,4 +103,29 @@ char *Rd_GetBuildTime(void)
snprintf(g_sBuildTime, sizeof(g_sBuildTime), "%s build [%s %s]", RD_VERSION, __DATE__, __TIME__); snprintf(g_sBuildTime, sizeof(g_sBuildTime), "%s build [%s %s]", RD_VERSION, __DATE__, __TIME__);
#endif #endif
return g_sBuildTime; return g_sBuildTime;
} }
uint16_t Rd_modbusCRC16(char *data, uint8_t length)
{
uint16_t crc = 0xFFFF;
for (uint8_t i = 0; i < length; i++)
{
crc ^= (uint16_t)data[i];
for (uint8_t j = 0; j < 8; j++)
{
if ((crc & 0x0001) != 0)
{
crc >>= 1;
crc ^= 0xA001;
}
else
{
crc >>= 1;
}
}
}
return crc;
}

1
library/common/include/common.h

@ -158,6 +158,7 @@ int Rd_Array2String(char *_pRes, int _iLen, char *_pSrc[], int _iNum, char *_Ptr
int Rd_FileExists(const char *_psPath); int Rd_FileExists(const char *_psPath);
int Rd_RegularFileExists(const char *_psPath); int Rd_RegularFileExists(const char *_psPath);
char *Rd_GetBuildTime(void); char *Rd_GetBuildTime(void);
uint16_t Rd_modbusCRC16(char *data, uint8_t length);
#ifdef BUILD_LOG #ifdef BUILD_LOG
extern void Rd_ElogEnableStrong(void); extern void Rd_ElogEnableStrong(void);

Loading…
Cancel
Save