消息关闭
    暂无新消息!
配置好ndk和jni后   打开串口 /dev/ttyS2 每次 fd 都等于-1 返回打开失败
然后我去看jni里open函数发现一个flags 
JNIEXPORT jobject JNICALL Java_com_example_administator_SerialPort_open
        (JNIEnv *env, jclass thiz, jstring path, jint baudrate,jint flags)
并且在打开串口时有用到
jboolean iscopy;
const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy);
fd = open(path_utf, O_RDWR | flags);

因为在java文件中并没有传入flags的参数
 public SerialPort(File device, int baudrate) throws SecurityException, IOException {
        mFd = open(device.getAbsolutePath(), baudrate);
        Log.v("SerialPort","mFd="+mFd);
        if (mFd == null) {
            throw new IOException();
        }
        mFileInputStream = new FileInputStream(mFd);
        mFileOutputStream = new FileOutputStream(mFd);
    }

但是我把 mFd = open(device.getAbsolutePath(), baudrate);改成mFd = open(device.getAbsolutePath(), baudrate,0);
加入一个0参数
直接报错 编译不过 参数不对
之后我只能不改java文件回到jni文件夹下把 .c和.h文件中
JNIEXPORT jobject JNICALL Java_com_example_administator_SerialPort_open
        (JNIEnv *env, jclass thiz, jstring path, jint baudrate,jint flags)

fd = open(path_utf, O_RDWR | flags);
改成
JNIEXPORT jobject JNICALL Java_com_example_administator_SerialPort_open
        (JNIEnv *env, jclass thiz, jstring path, jint baudrate)

fd = open(path_utf, O_RDWR);

编译通过 串口打开

问题是 第一种方法为什么会报错 编译不过 
jni里函数需要传入的参数为什么java不传也不会出问题

1个回答

︿ 3
在我的C文件里直接就是这种的,并没有flag
JNIEXPORT jobject JNICALL Java_com_example_administator_SerialPort_open
        (JNIEnv *env, jclass thiz, jstring path, jint baudrate)
fd = open(path_utf, O_RDWR);

但是打开串口一直出错,返回 Open() fd = -1。请问博主,这可能是因为什么原因呢。