我已经建立了一个简单的串行通信共享库,我尝试在python中使用ctypes库,我遵循的步骤是:
1.通过调用ctypes.cdll.loadlibrary()加载.so文件。
1.初始化串行通信模块。
1.发送0xFF作为同步字节。
当我执行上面的步骤时,我在另一端得到的不是垃圾数据。有趣的是,当我在C中使用.so文件并执行相同的操作时,它工作得非常好。所以我的问题是ctypes模块是否以任何方式操纵加载的库?我对在Python中使用C相当陌生,这里我是空白的。任何建议都是非常有帮助的。
#!/usr/bin/env python3
import ctypes
test_lib = ctypes.cdll.LoadLibrary("./demo_static.so")
string2 = "/dev/ttyS2"
# create byte objects from the strings
UART_RIGHT = string2.encode('utf-8')
baud = 500000
test_lib.serial_com_init(0, UART_RIGHT, baud)
(相关)C代码:
int serial_com_init(char *left, char *right, int baudrate) {
int fd_l, fd_r;
uart_t uart_left, uart_right;
uint8_t flags_l, flags_r;
if (left) {
fd_l = uart_init_linux(left, baudrate);
uart_left->fd = fd_l;
}
if (right) {
fd_r = uart_init_linux(right, baudrate);
uart_right->fd = fd_r;
}
serial_com_init_cr(uart_left, uart_right, flags_l, flags_r);
serial_com_hello_init();
return 0;
}
1条答案
按热度按时间nimxete21#
根据[Python. Docs]:ctypes-指定所需的参数类型(函数原型),例如:
你需要指定参数类型(在函数调用之前)。这在 * 064bit**Python * 上有着至关重要的区别。查看[SO]: C function called from Python via ctypes returns incorrect value (@CristiFati's answer)了解更多细节: