C 通过 UART 将结构发送到 Python
C send struct over UART to Python
我正在尝试通过UART(来自ESP32(发送一个结构,以便使用本指南由Python处理。
// we send this to the host, to be processed by python script
struct package {
uint8_t modifier;
uint8_t keyboard_keys[6];
};
// instantiate struct
package to_send = {};
// send the contents of keyboard_keys and keyboard_modifier_keys
// https://folk.uio.no/jeanra/Microelectronics/TransmitStructArduinoPython.html
void usb_keyboard_send(void)
{
to_send.modifier = keyboard_modifier_keys;
for(uint8_t i = 0; i < 6; i++) {
to_send.keyboard_keys[i] = keyboard_keys[i];
}
printf("S");
printf((uint8_t *)&to_send, sizeof(to_send));
printf("E");
}
但是我得到错误:invalid conversion from 'uint8_t* {aka unsigned char*}' to 'const char*' [-fpermissive]
我对C++很陌生,我尝试过各种选角,但我就是无法让它工作。有人可以提供指导吗?
撇开混合 ASCII 和原始二进制通常是一个坏主意,您的代码几乎是正确的。
您有 2 个主要错误:
// instantiate struct
package to_send = {};
应该是:
// instantiate struct
struct package to_send = {};
另外,要直接写入(非格式化文本(到 STDOUT,您需要使用 fwrite((
即
printf("S");
fwrite((uint8_t *)&to_send, sizeof(uint8_t), sizeof(struct_package), STDOUT);
printf("E");
顺便说一句,在修复这两个错误后,您可能会惊讶地发现您的结构不是您期望的字节数。 编译器可以通过将字段填充到字大小边界(ESP32 上为 32 位(来优化它,使内存访问更快。 sizeof(( 将返回正确的值,考虑到所做的任何优化,但您的 Python 代码可能没有预料到这一点。 要解决此问题,您可能希望使用编译器提示,例如__attribute__((__packed__))
. 有关结构填料的一般指南,请参见此处。
相关文章:
- 如何大致将 cpp 代码结构转换为 python
- C++中类似Python字典的结构?
- 如何通过 C 在用户定义的结构中编写双数组并使用 CTYPE 传递给 Python
- 如何使用 SWIG 接口访问 python 中的 C++ typedef'd 结构
- 用于基于节点的树结构的Python绑定
- C 通过 UART 将结构发送到 Python
- Python和Ctypes访问带有嵌套结构的C 类
- 如何为C++结构自动生成 python 数据解析器
- 什么可以用来在 C++ 中保存图形等结构(Python pickle 等效物)
- 如何在python中创建等效的结构并使用malloc更改空指针的引用
- 使用Python将C 结构更改为JSON字符串
- C++/Python 中对象和结构的二进制文件结构
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?
- 序列化python类与C型结构(带有位式结构)以发送插座
- 使用 ctypes 将 python dict 转换为结构
- Python 数据结构及其等效C++
- 使用 boost::p ython,如何将结构体向量作为字典列表返回给 Python
- 如何在 Python 中的结构中使用C++结构
- 如何将CPP结构中的字符串转换为Python struct
- 具有许多函数的python-c++接口的代码的python结构是什么?