- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 python 脚本(在我的笔记本电脑上)和 AVR 微 Controller 上运行的 C 程序之间的通信时遇到一些问题。他们通过 UART 进行通信。我的问题是现在我进行了以下设置。
Python发送数据:
data = port.write(struct.pack("b", val))
Python读取数据:
v = struct.unpack('B', d)[0]
print "%s: %d" % ( time.ctime(time.time()), v )
C(AVR)读取数据:
received = (uint8_t) UDR0;
C(AVR)写入数据(回显):
UDR0 = received;
我的问题是这样设置后,我的 python 脚本返回的数字如下:
发送:0 - 31,接收:224 - 255发送:32 - 63 接收:32 - 63发送:62 -95 接收:224 - 255发送:96 - 100 接收:224 - 228
我不明白为什么这些数字会如此匹配,但我怀疑这是因为我的数据类型。我考虑过使用 chr() 和 ord() 来转换字符和从字符转换,但必须有一种更简单(更容易理解)的方法。我开始研究 python 中的 ctypes 并希望使用 c_ubyte 函数,但无法弄清楚如何正确使用它。我对 python 相当陌生。有人对我的逻辑不正确的地方有任何建议吗?
同样,我的猜测是转换和使用有符号与无符号数据类型。
谢谢。
最佳答案
我发现了这个问题。代码是正确的。我的 AVR 板或 UART 模块有问题。当我发送值 0 - 31 时,主板接收到 0b11100000 - 0b11111111。对于 32 - 63,董事会收到 0b00100000 - 0b00111111。对于 64 - 95,董事会收到 0b11100000 - ob11111111。对于 96 - 100,董事会收到 0b11100000 - 0b11100100。
我还不知道为什么我会得到这些值。我觉得很奇怪,3 个最高有效位的翻转方式是这样的。为了暂时解决我的问题,直到我找出问题所在(查看是否是我的 UART 模块),我使用 25 个值的子集,并将我的值增加 4,以获得我想要的 0 - 100 范围。
关于python - 如何将Python数字转换为1字节C类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558174/
我是一名优秀的程序员,十分优秀!