我建立了一个简单的串行通信共享库,我正在尝试使用ctypes库在python中使用它。我要执行的步骤是:
当我执行上述步骤时,我并不仅在另一端获取垃圾数据。有趣的是,当我在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;
}
答案 0 :(得分:0)
根据[Python]: ctypes: Specifying the required argument types (function prototypes)的功能,例如:
int serial_com_init(char *left, char *right, int baudrate);
您需要指定参数类型(在函数调用前之前)。这对64位 Python 至关重要:
test_lib.serial_com_init.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_int]
init_result = test_lib.serial_com_init(None, UART_RIGHT, baud)
注释:
UART_RIGHT = b"/dev/ttyS2"