近日工作小结_2015年12月9日21:32:01

作者分享了两个月以来学习ZYNQ的经验,涉及Linux、AXI、HLS、SDSoC等技术。面对OpenCV函数无法在HLS中使用的挑战,预示著一场艰苦的编码战役即将展开。

目前来说课题的进度按照原计划正常进行着,没有发现原有方向有什么大的问题。但是方案分支多出了许多选择,艰难的选择...每种方法都试的话时间估计不够。


zynq已经接触两个月了,感觉信息量还是挺大的----Linux、axi、hls、SDSoC......正在紧急补脑中。


opencv的并不是所有的函数都可以在HLS里使用(我要用的没有...),看来未来有一场coding恶战了....





你看到的志中: ``` *data:0x1d215dbe Get data from wiegand driver model:1d215dbe wiegand card number:1d215dbe val string BE5D211D00000000 ``` 这些输出看似矛盾,但其实背后是 **数据在内存中的表示方式不同** 所导致的,核心原因是: --- ## 🔍 为什么是 `0x1d215dbe` 而数据库中是 `BE5D211D00000000`? ### ✅ 1. **`0x1d215dbe` 是整数在小端系统下的值** 你执行了: ```c memcpy(&uid_data, mbuf, sizeof(unsigned long)); ``` 假设 `mbuf` 的前4个字节是: ```c {0xBE, 0x5D, 0x21, 0x1D} ``` 在 **小端(Little Endian)系统**(如 x86/x64)上,这会被解释为: ```c uid_data = 0x1D215DBE ``` 所以你用 `%x` 输出就是: ``` 1d215dbe ``` 这是整数的“逻辑值”。 --- ### ✅ 2. **`BE5D211D00000000` 是原始字节顺序的十六进制字符串表示** 你执行了: ```c memcpy(msg.card_number_hex, mbuf, mlen); ``` 假设 `mbuf` 是一个 8 字节数组: ```c {0xBE, 0x5D, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00} ``` 然后你把这个字节数组按 **每个字节转成大写十六进制字符** 的方式写入数据库,结果就是: ``` BE5D211D00000000 ``` 这是原始字节的“物理顺序”。 --- ### ✅ 3. **hid:0x1d21 和 pid:0x5dbe 的由来** 你在解析 Wiegand 数据时,可能将 `mbuf` 的前两个字节作为 `hid`,后两个作为 `pid`: ```c hid = (mbuf[0] << 8) | mbuf[1]; // 0x1D21 pid = (mbuf[2] << 8) | mbuf[3]; // 0x5DBE ``` 这也解释了为什么: ``` hid:0x1d21 pid:0x5dbe ``` --- ### 🔄 小结对比表: | 输出内容 | 来源 | 数据含义 | 字节顺序 | |----------|------|-----------|------------| | `0x1d215dbe` | `uid_data` 整数输出 | `mbuf` 前4字节的小端整数表示 | 小端 | | `1d215dbe` | `snprintf("%x", uid_data)` | 整数转字符串,小写 | 小端 | | `BE5D211D00000000` | `memcpy(mbuf, ...)` 后转字符串 | 原始字节顺序,按大写输出 | 大端风格 | | `hid:0x1d21` | `mbuf[0] << 8 | mbuf[1]` | 手动拼接高位在前 | 大端风格 | --- ### ✅ 如何统一输出? 如果你希望输出一致,比如都为 `BE5D211D`,你有两种选择: #### 方法一:保持字节顺序不变,直接转字符串 ```c char hex_str[9]; for (int i = 0; i < 4; i++) { sprintf(hex_str + i * 2, "%02X", mbuf[i]); } ``` 输出就是:`BE5D211D` #### 方法二:使用 htonl 统一整数顺序 ```c #include <arpa/inet.h> uint32_t uid_data; memcpy(&uid_data, mbuf, 4); uid_data = ntohl(uid_data); // 或 htonl(uid_data),根据需求选择 snprintf(buf, 64, "%08X", uid_data); ``` 输出为:`BE5D211D` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值