Python ctypesを使用してrs232.cを呼び出すときに、セグメンテーション違反の問題を解決するにはどうすればよいですか?

ロジャー・リン

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ