完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
agile_modbus是支持多主机的,但遇到一个rtu主机要求crc16值要swap时如何处理?遇到modbus的主机要求CRC16值要SWAP时该如何处理呢? |
|
相关推荐
4个回答
|
|
自己看源码吧 CRC校验高低位需要调整的话,自己动手
/** @defgroup RTU_Private_Functions RTU Private Functions * @{ */ /** * @Brief RTU CRC16 计算 * @param buffer 数据指针 * @param buffer_length 数据长度 * @Return CRC16 值 */ static uint16_t agile_modbus_rtu_crc16(uint8_t *buffer, uint16_t buffer_length) { uint8_t crc_hi = 0xFF; /* high CRC byte initialized */ uint8_t crc_lo = 0xFF; /* low CRC byte initialized */ unsigned int i; /* will index into CRC lookup */ /* pass through message buffer */ while (buffer_length--) { i = crc_hi ^ *buffer++; /* calculate the CRC */ crc_hi = crc_lo ^ _table_crc_hi; crc_lo = _table_crc_lo; } return (crc_hi << 8 | crc_lo); } |
|
|
|
自己写个调整字节顺序的宏定义
|
|
|
|
libmodbus 里有这种函数
static inline uint16_t bswap_16(uint16_t x) { return (x >> 8) | (x << 8); } static inline uint32_t bswap_32(uint32_t x) { return (bswap_16(x & 0xffff) << 16) | (bswap_16(x >> 16)); } |
|
|
|
自己写个调整函数,解决
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
1379 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1080 浏览 0 评论
1502 浏览 0 评论
1385 浏览 0 评论
1030 浏览 0 评论
74589 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 17:33 , Processed in 0.734528 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号