使用Python ctypes调用rs232.c时如何解决分段错误问题?

罗杰·林

我将rs232.c构建为共享库,并尝试使用python3进行调用。但是,当尝试获取com端口tcgetattr()的属性时,出现了“分段错误”错误。有人知道这是什么问题吗?我的操作系统是树莓派p3。

testcom.py

from ctypes import *
comdll = cdll.LoadLibrary("rs232.so")
comdll.RS232_OpenComport(c_int(22),c_int(115200),c_char_p(b'8N1'))

rs232.c

#include <termios.h>
#include <unistd.h>
#define RS232_PORTNR  39
int Cport[RS232_PORTNR],error;
struct termios old_port_settings[RS232_PORTNR];

int RS232_OpenComport(int comport_number, int baudrate, const char *mode)
{
    error = tcgetattr(Cport[comport_number], old_port_settings + comport_number); //segmentation fault at this line
    return error;
}
约瑟夫·西布尔-恢复莫妮卡

问题是您为变量命名error并使其成为全局变量作为GNU扩展,glibc添加了一个名为的函数error,并且您的库最终使这两者混淆,并尝试写入tcgetattr称为的函数的返回值error要对其进行修复,请重命名error为其他名称,static对其进行声明,或者将其声明移入RS232_OpenComport

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Python Ctypes和C ++时,如何解决分段错误?

如何使用RS232与两台PC通信

如何更改串行(RS232)端口号

如何使用nodejs读取串口数据并使用rs232电缆将输出发送到PHP服务器?

在链表实现中调用strcpy()时如何解决分段错误?

如何解决由我试图调用的求和函数引起的分段错误?C ++

将Rj45到D9 RS232适配器与笔记本电脑配合使用以控制RS232设备

使用模式实验室时,如何解决最大调用堆栈大小超出的错误?

使用zip()函数时如何解决以下错误?TypeError:“列表”对象不可调用

在Python中通过RS232到USB电缆读取秤数据

使用Java在HMI和PC之间进行RS232通讯

使用Pymodbus将RS232 Ascii转换为Modbus TCP

使用验证时如何解决错误?

如何查看我的串行端口是否为rs232 / 485?

如何向RS232串口发送命令?

如何修复 rs232 客户显示器上混乱的字符

如何用 RS232 调制解调器初始化 pppd 连接?

使用grunt-shell调用调用docker run的脚本时,如何解决“输入设备不是TTY”问题?

在python中使用熊猫时如何解决“属性错误”

调用 google firebase api 时出现以下错误。如何解决这个问题

使用Python C API两次调用C函数时出现分段错误

C - 如何在函数调用后释放指针时解决分段错误?

使用TestNG从硒测试用例中的页面对象调用方法时,如何解决NullPointerException错误?

将 RS232 连接到串行并从 python 脚本建立到 Nextion 显示器的连接

通过AJAX将始终运行的while循环Python脚本中的RS232数据发送到HTML?

在目标c中使用nspredicate时如何解决空间问题?

使用React时如何解决400错误请求错误?

如何解决 Python 代码中的类型错误问题?

保存地址时出现问题 - 错误“在构建期间调用了 setState() 或 markNeedsBuild()”。如何解决这个错误?