- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试理解(并随后实现)clean flight quadrocopter 固件为 srxl 包验证采用的 crc16 验证。
SRXL 是一种简单的串行协议(protocol),用于通过单条串行线传输伺服值。
包结构是这样的:
crc16 由以下函数验证:
//srxlFrameLength is the package length
//srxlFrame is the received package buffer
uint16_t crc_calc = 0;
for (i = 0; i < srxlFrameLength; i++) {
crc_calc = crc16_CCITT(crc_calc, srxlFrame[i]);
}
if(crcCalc == 0){ //package is valid }
我不明白这是怎么回事。如果我要实现这个,我会为包的所有字节迭代计算 crc,直到我到达保存的 crc,然后与保存的 crc 进行比较。为什么这个实现也有效?
我还想为发件人端实现一个包生成器代码。是否可以像这样实现 crc 生成:
uint16_t crc_calc = 0;
for(int i = 0; i < packetLength; ++i){
crc_calc = crc16_CCITT(crc_calc, packet[i]);
}
//concat calculated crc16 to packet here.
提前致谢
麦芽糖
最佳答案
如果 CRC 正确存储在消息的末尾,则它具有消息的 CRC 和串联的 CRC 是常数的属性,假设没有错误。根据 CRC 的定义,该常量可以为零。
原因是 CRC 本质上是消息时间 xn 的多项式除法的余数,其中 n 是 CRC以位为单位的长度。因此,当您将 CRC 添加到消息中时,您将用余数替换最后的 n 个零,从而导致整个除法没有余数。 (请注意,二元多项式的负数就是该多项式,因为与自身的异或为零。)
是的,如果您愿意,您可以只计算消息的 CRC,然后将结果与附加到消息的 CRC 进行比较。
关于CRC16生成和校验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828799/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!