rs232.cを共有ライブラリとしてビルドし、python3を使用して呼び出しようとします。しかし、comポートtcgetattr()の属性を取得しようとすると、「セグメンテーション違反」エラーが発生しました。誰もがこの問題が何であるか知っていますか?私のOSシステムはラズベリーパイ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
、および2を混乱との戻り値の書き込みしようとしてまで、あなたのライブラリーの端tcgetattr
と呼ばれる関数オーバーerror
。これを修正するには、名前error
を別の名前に変更するか、宣言するstatic
か、宣言を内に移動しRS232_OpenComport
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加