安卓串口打不开,open函数老是返回-1 10C

在开发板上打开串口就开始报错,SElinux已经修改成permissive模式,权限改成777了。报错日志如下
V/audio_hw_primary(102): do not use out resampler
D/dalvikvm(22743): Trying to load lib /data/app-lib/android.serialport-1/libserial_port.so 0x41cc5b18
D/dalvikvm(22743): Added shared lib /data/app-lib/android.serialport-1/libserial_port.so 0x41cc5b18
D/dalvikvm(22743): No JNI_OnLoad found in /data/app-lib/android.serialport-1/libserial_port.so 0x41cc5b18, skipping init
D/serial_port(22743): Opening serial port /dev/ttyS0
D/serial_port(22743): open() fd = -1
E/serial_port(22743): Cannot open port
E/SerialPort(22743): native open returns null

2个回答

首先,查看环境是否存在问题

  1. 运行-》cmd-》adb shell –》进入linux底层

  2. 查看selinux是否为关闭状态,查看命令为:getenforce

若返回permissive即为正确,若返回enforcing,则进行修改。

3.关闭setlinux的方法:

#vi /etc/selinux/config
将文件中的SELINUX="" 为 disabled ,然后重启。
如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式

  1. 修改完成后修改对应串口的权限

cd dev 到dev目录

chmod 777 ttyS0 (ttyS0 修改为自己配置的端口)

4.确保NDK环境安装正常。

gssjohn
gssjohn setenforce 0 同样的错误.
大约一年之前 回复
weixin_42626594
weixin_42626594 ZHENGJIE
接近 2 年之前 回复
g1825946909
Endeavour92 这个试过了,还是不行。我模拟器上能通信,,考到板上就不行了
接近 2 年之前 回复

我也遇到此问题,楼主解决没有,te中所有权限都开了,没有提示权限的问题,就是open("/dev/ttyS1",O_RDWR)总是返回-1,我的系统是android 7.0哪位大神能帮忙分析下. 同样的代码在framework下就没问题,移植到APP的JNI里就会出现此问题.

qq_36858110
qq_36858110 请问这个问题你解决了吗
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
串口通信,如果read函数返回值是-1,可能是因为?

1、用open函数打开串口时候返回值不是-1.可见正常打开了 2、让ARM(上位)与8051(下位)通信,协议是9600,8N1(经常搞通信的都懂的) 3、51单片机大概每秒就向ARM发送一个byte,8位。 4、结果qtopia的terminal上一直打印“Read Error” 5、关掉terminal,打开qtipia自带的串口助手,竟然也接收不到信号! 6、把8051电源关掉,让通信不可能存在,ARM上READ得到返回值也不是0,依然是-1! 下面添加主函数代码。不久将放程序清单。 > int main(void) { int fd; int nread; char buff[2]; char *dev ="/dev/ttySAC0"; fd = OpenDev(dev); if (fd>0) set_speed(fd,9600); //打开后设置波特率9600 else { printf("Can't Open Serial Port!\n"); exit(0); } if (set_Parity(fd,8,1,'N')== FALSE) //设置8,1,n 注意,这里和上面要和下位机相符才可能通信 { printf("Set Parity Error\n"); exit(1); } fcntl(fd,F_SETFL,FNDELAY);//UNBLOCK while(1) { if(read(fd,buff,1)<0){printf("Read Error\n");} while((nread = read(fd,buff,1))>0) { printf("\nLen %d\n",nread); buff[nread+1]='\0'; printf(" Ken %s",buff); tcflush(fd, TCIOFLUSH);//读完再度清洗 } }

linux下串口编程read函数返回(非超时返回)问题

串口编程经典应用场景:打开串口,阻塞模式,非超时返回,有数据返回,无数据死等。 简易代码为例: void* read_thread(void* param) { char szbuf[128]; int size = 0; while (running) { size = read(fd, szbuf, sizeof(szbuf)); } return 0; } int main() { fd = open(port, O_RDWR | O_NOCTTY); struct termios s; s.c_cc[VTIME] = 0; s.c_cc[VMIN] = 1; pthread_create(&thread, 0, read_thread, 0); sleep(10); running = false; // 有什么函数可以让读线程的read函数立即返回? sleep(1); close(fd); return 0; } 先声明,并非讨论以上应用的解决方案,而是想求教有没有什么办法让死等的read函数立即返回。close(fd),之前的read并不会返回,之后read返回-1。

(高分求救)Linux内核在执行filp_open()函数的时候崩溃

在开发板上测试的时候,通过串口打印出来的信息发现,内核一直停在了filp_open()函数这,之后的代码都不能执行,filp_open()函数的参数没有问题,急求各路大神解救!!!!!

c#串口打开报错System.IO.IOException: 函数不正确

1,第一次打开串口报错:System.UnauthorizedAccessException: Access to the port 'COM1' is denied. 2,然后通过设备管理器,禁用串口,在启动串口后 3再次打开串口,报错,System.IO.IOException: 函数不正确。 at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) at System.IO.Ports.InternalResources.WinIOError() at System.IO.Ports.SerialStream.SetBufferSizes(Int32 readBufferSize, Int32 writeBufferSize) at System.IO.Ports.SerialPort.Open()

android 串口通讯 为什么收不到返回的数据 大神们快来帮帮忙 真的很急啊

安卓板开发的快递柜的软件 windows上用串口助手调试可以收到开锁反馈,可是放到安卓这死活收不到反馈数据啊 这得怎么办 ![图片说明](https://img-ask.csdn.net/upload/201704/17/1492414547_210772.png)

linux串口编程实现自收自发功能发送可以发出去read读取总是返回-1

实现的功能就是串口的自收自发功能我用的事ch340 ch340的u口连接到笔记本上 ch340的串口端的rx 和tx用杜邦线连接在一起就是这样了但是现在问题是编译完成后发送可以发出去但是读取总是失败read返回值总是-1不知道哪里出错了求大神们解答下 小弟拜谢 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> void set_speed(int, int); int main() { int fd,flag,wr_num=0,rd_num=0; struct termios term; speed_t baud_rate_i,baud_rate_o; char send_buf[]="hello,serial!",recv_buf[20]; fd=open("/dev/ttyUSB0",O_RDWR|O_NONBLOCK); if(fd==-1) printf("can not open the COM1!\n"); else printf("open COM1 ok!\n"); flag=tcgetattr(fd,&term); baud_rate_i=cfgetispeed(&term); baud_rate_o=cfgetospeed(&term); printf("杈撳叆娉㈢壒鐜囨槸%d锛岃緭鍑烘尝鐗圭巼鏄?d锛屾枃浠舵弿杩扮鏄?d\n",baud_rate_i,baud_rate_o,fd); set_speed(fd,9600); flag=tcgetattr(fd,&term); baud_rate_i=cfgetispeed(&term); baud_rate_o=cfgetospeed(&term); printf("杈撳叆娉㈢壒鐜囨槸%d锛岃緭鍑烘尝鐗圭巼鏄?d锛屾枃浠舵弿杩扮鏄?d\n",baud_rate_i,baud_rate_o,fd); while(1) { wr_num=write(fd,send_buf,sizeof(send_buf));/*鍏堝啓鍏?/ if(wr_num>0) { printf("write success!\n"); } else { printf("write fail!\n"); } sleep(1); rd_num=read(fd,recv_buf,sizeof(recv_buf));/*鍐嶈鍑?/ if(rd_num>0) { printf("we can read \"%s\" from the COM1.total:%d characters\n",recv_buf,rd_num); } else { printf("read fail!\n"); } sleep(2); } } int speed_arr[] = {B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, }; int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, }; void set_speed(int fd, int speed) { int i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]); cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd1"); return; } tcflush(fd,TCIOFLUSH); } } }

android在实现串口通信出现无法打开串口

在android实现串口通信时,在dos中设置自己的模拟器 emulator @模拟器名称 -qemu -serial COM1 输入后出现了Failed CreateFile (2) chardev: opening backend "serial" failed ko:qemu: could not open serial device 'COM1' 应该怎么解决啊大神

vc2010下串口函数返回值无效的问题(关闭后再打开即无效)

原来vc6下的代码,可以正常使用,现在移植到2010和2013下,问题出现,具体描述如下: 因为要读取一个设备的数据(该数据由软件操作控制发送数据,可持续不断以一定格式发);vc2010环境,用API函数(createfile)打开串口,期间用afxbeginthread开启了一个线程,运行进程函数,该函数主要为只要联机变量为真(连上了串口),就等待串口的字符串,然后把字符串放到缓存,回调函数完成字符串的处理和显示。 现在,当我第一次打开串口(没有连设备,只是用一根USB-RS232线转了一个串口),正常打开,关闭后(CloseHandle函数)再次打开,createfile返回的句柄即显示无效:错误代码6,句柄为0xfffffff。只能重新运行程序,然后还是第一次正常打开,关闭后即无法打开! ```打开串口,并启动线程 BOOL CComLink::NewConnection(BYTE nRetType, WORD UserID, BYTE nPort, LPVOID pOwner, LPVOID pParam) { if(m_bConnected) return FALSE; m_hCom = OpenConnection(CommProc, nPort); m_UserID = UserID; m_nRetType = nRetType; m_pWnd = (CWnd *)pOwner; m_pMsgFunc = (_CALLBACK_MSG *)pParam; return m_bConnected; } HANDLE CComLink::OpenConnection(AFX_THREADPROC pfnThreadProc, BYTE nPort) { HANDLE h_Com; wchar_t szPort[15]; COMMTIMEOUTS CommTimeOuts; wsprintf(szPort,_T("\\\\.\\COM%d"),nPort); h_Com = CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); if(h_Com == INVALID_HANDLE_VALUE) return NULL; else { SetCommMask(h_Com,EV_RXCHAR); SetupComm(h_Com,4096,4096); PurgeComm(h_Com, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 1000; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 1000; SetCommTimeouts(h_Com, &CommTimeOuts); m_bConnected = true; } if(SetCom(h_Com)) { m_pThread = AfxBeginThread(pfnThreadProc, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL); if(m_pThread == NULL) { CloseCom(); return NULL; } else { m_bConnected = true; } } else { CloseCom(); return NULL; } return h_Com; } ``` ```进程函数 UINT CommProc(LPVOID pParam) { DWORD dwMask = 0; COMSTAT ComStat; DWORD dwErrorFlags; DWORD dwLength; CComLink *pVoid=(CComLink*)pParam; SetCommMask(pVoid->m_hCom,EV_RXCHAR); while(pVoid->m_bConnected) { WaitCommEvent(pVoid->m_hCom, &dwMask, NULL); // 等待串口消息 if((dwMask & EV_RXCHAR)==EV_RXCHAR) // 如果是字符消息 { ClearCommError(pVoid->m_hCom, &dwErrorFlags, &ComStat); if(ComStat.cbInQue) { dwLength=min(sizeof(pVoid->m_DataBuf) - pVoid->m_nDataLen, ComStat.cbInQue); // 取缓冲区数据,确保分配的缓冲区能足够存储 if(!ReadFile(pVoid->m_hCom, &pVoid->m_DataBuf[pVoid->m_nDataLen], dwLength, &dwLength, &pVoid->osRead)) // 读取数据,存储到当前缓冲区位置之后 { if(GetLastError()==ERROR_IO_PENDING) { GetOverlappedResult(pVoid->m_hCom, &pVoid->osRead, &dwLength, true); } } pVoid->m_nDataLen += dwLength; // 数据长度累加 if(pVoid->m_nRetType == DATA_BY_MESSAGE) // 消息模式返回数据 { pVoid->m_pWnd -> SendMessage(WM_COM_RECMSG, pVoid->m_UserID); } else if(pVoid->m_nRetType == DATA_BY_CALLBACK) // 回调函数返回数据 { pVoid->m_pMsgFunc(WM_COM_RECMSG, (long)pVoid->m_pWnd, pVoid->m_UserID); } } }// end if } return 0; } ``` ```关闭串口 BOOL CComLink::CloseCom() { FindClose(m_hCom); CloseHandle(m_hCom); m_bConnected = false; m_hCom =INVALID_HANDLE_VALUE; return TRUE; } ``` ```设置串口 BOOL CComLink::SetCom(HANDLE h_Com) { DCB dcb; GetCommState(h_Com,&dcb); dcb.BaudRate = m_ComSet.BaudRate; dcb.ByteSize = m_ComSet.ByteSize; dcb.Parity = m_ComSet.Parity; dcb.StopBits = m_ComSet.StopBits; dcb.fRtsControl = RTS_CONTROL_ENABLE; return SetCommState(h_Com,&dcb); } ```

Android与单片机通过串口通信,收不到返回数据

Android通过串口向单片机发送一条16进制的指令,单片机收到以后会返回一条相同格式的命令。Android与PC上的串口助手调试,可以正确收发数据;单片机与串口助手调试,也可以正确收发数据。但是Android直接与单片机连接就收不到返回的数据。(发送数据的线程之后已经进行了延时)

C#串口接收有时候会捕捉到“函数不正确”错误

/// <summary> /// 發送一條16進制指令到繼電器 /// </summary> private void SendDataToJiDianQi(string strSend) { try { string[] strArray = strSend.Split(' '); //01 02 00 00 00 09 B8 0C byte[] byteBuffer = new byte[strArray.Length]; int count = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = Convert.ToInt32(strArray[i], 16); byteBuffer[count] = Convert.ToByte(decNum); count++; } if (_spJiDianQi.IsOpen) { _spJiDianQi.DiscardInBuffer(); _spJiDianQi.DiscardOutBuffer();//当你的程序在窗口发送一帧数据(所谓一帧是指由多个字节组成的有逻辑意义的数据)过程中检测到串口发送错误,如果让串口继续发生就没有意义了,这个时候可以用SerialPort.DiscardOutBuffer方法来清除已经进入发送缓冲区的错误数据; _spJiDianQi.Write(byteBuffer, 0, byteBuffer.Length); } else { WriteLog("繼電器串口打開失敗!"); } } catch (Exception ex) { WriteLog("發送指令給繼電器異常:" + ex.Message); if (_spJiDianQi.IsOpen) { _spJiDianQi.DiscardOutBuffer(); } } } /// <summary> /// 接收繼電器串口數據的方法 /// </summary> private string ReceiveDataFromJiDianQi() { string value = ""; try { if (_spJiDianQi.IsOpen) { Thread.Sleep(50); //為了接收數據的完整性 int byteNum = _spJiDianQi.BytesToRead; if (byteNum > 0) { byte[] receivedData = new byte[byteNum]; //创建接收字节数组 if (receivedData.Length > 0) { _spJiDianQi.Read(receivedData, 0, receivedData.Length); //读取数据 for (int i = 0; i < receivedData.Length; i++) { value += receivedData[i].ToString("X2"); //16进制显示 } //_spJiDianQi.DiscardInBuffer();//当你的程序在接收一帧数据时发生错误,如果再让串口继续接收也没有意义了,这个时候可以用SerialPort.DiscardInBuffer方法来清除已经进入接收缓冲区的错误数据了 } else { WriteLog("讀取繼電器串口數據時,沒有數據返回。"); } } } else { WriteLog("繼電器串口打開失敗!"); } } catch (Exception ex) { WriteLog("讀取繼電器串口數據方法異常:" + ex.Message); //if (_spJiDianQi.IsOpen) //{ // _spJiDianQi.DiscardInBuffer(); //} } return value; }

android 串口通信到底是什么意思?

我用android studio准备写一个 使用串口来收发数据的app,网上搜索后,发现大家都是围绕着serialport这个东西来写的, 而且写的都是大同小异,但是我导入这个项目之后,并不能成功运行?串口每次都成功打开了,我打开的是ttyrs0,但是每次到这个函数就不行了,tcgetattr()。我到现在还不是很明白,串口通信,是与谁在通信?我都没有与任何设备连接,怎么通信?难道自己跟自己通信?

为什么调用不了串口的接收函数呢 只能发送 不能接收? 本人菜鸟,求指点

public partial class Form1 : Form { //SerialPort sp1 = new SerialPort();//声明一个串口类 bool isOpen = false;//打开串口标志位 bool isSetProperty = false;//属性设置标志位 bool isHex = false;//十六进制显示标志位 public Form1() { //sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.MaximumSize = this.Size; this.MinimumSize = this.Size; this.MaximizeBox = false; for (int i = 1; i <= 10; i++) //假设最大支持到串口10 { cbxCOMPort.Items.Add("COM" + i); } cbxCOMPort.SelectedIndex = 0;//设当前指点选项的索引值为0 //列出常用波特率 cbxBaudRate.Items.Add("1200"); cbxBaudRate.Items.Add("2400"); cbxBaudRate.Items.Add("4800"); cbxBaudRate.Items.Add("9600"); cbxBaudRate.Items.Add("19200"); cbxBaudRate.Items.Add("38400"); cbxBaudRate.Items.Add("43000"); cbxBaudRate.Items.Add("56000"); cbxBaudRate.Items.Add("57600"); cbxBaudRate.Items.Add("115200"); cbxBaudRate.SelectedIndex = 3; //列出停止位 //cbxStopBits.Items.Add("0"); cbxStopBits.Items.Add("1"); cbxStopBits.Items.Add("1.5"); cbxStopBits.Items.Add("2"); cbxStopBits.SelectedIndex = 0; //列出奇偶校验位 cbxParity.Items.Add("无"); cbxParity.Items.Add("奇校验"); cbxParity.Items.Add("偶校验"); cbxParity.SelectedIndex = 0; //列出数据位 cbxDataBits.Items.Add("8"); cbxDataBits.Items.Add("7"); cbxDataBits.Items.Add("6"); cbxDataBits.Items.Add("5"); cbxDataBits.SelectedIndex = 0; //默认为char显示 rbnChar.Checked = true; } private void btnCheckCOM_Click(object sender, EventArgs e) { bool comExistence = false;//有可用串口标志位 cbxCOMPort.Items.Clear();//清楚当前串口号中的所有串口名称 for (int i = 1; i <= 10; i++) { try { //SerialPort sp= new SerialPort("COM" + i); //实例化端口 sp1 = new SerialPort("COM" + i); sp1.Open(); sp1.Close(); cbxCOMPort.Items.Add("COM" + i); comExistence = true; } catch { continue; } } if (comExistence) { cbxCOMPort.SelectedIndex = 0; //显示第一个添加的索引 } else { MessageBox.Show("没有找到可用串口!", "错误提示");//“错误提示”显示在标题栏,“没找到串口”为显示文本 } } //检查串口是否设置 private bool CheckPortSetting() { if (cbxCOMPort.Text.Trim() == "") return false; if (cbxBaudRate.Text.Trim() == "") return false; if (cbxDataBits.Text.Trim() == "") return false; if (cbxParity.Text.Trim() == "") return false; if (cbxDataBits.Text.Trim() == "") return false; else return true; } private bool CheckSendData() { if (tbxSendData.Text.Trim() == "") return false; else return true; } //设置串口的属性 private void SetPortProperty() { sp1.PortName = cbxCOMPort.Text.Trim(); //设置串口名 sp1.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());//设置串口的波特率 float f = Convert.ToSingle(cbxStopBits.Text.Trim());//将数字的制定字符串表示形式转换为等效的单精度浮点数 if (f == 0) { sp1.StopBits = StopBits.None; } else if (f == 1.5) { sp1.StopBits = StopBits.OnePointFive; } else if (f == 2) { sp1.StopBits = StopBits.Two; } else { sp1.StopBits = StopBits.One; } sp1.DataBits = Convert.ToInt16(cbxDataBits.Text.Trim());//设置数据位 string s = cbxParity.Text.Trim(); //设置奇偶校验位 if (s.CompareTo("无") == 0) //与字符串是否在同一位置,在前面,还是在后面 { sp1.Parity = Parity.None; } else if (s.CompareTo("奇校验") == 0) { sp1.Parity = Parity.Odd; } else if (s.CompareTo("偶校验") == 0) { sp1.Parity = Parity.Even; } else { sp1.Parity = Parity.None; } sp1.ReadTimeout = -1;//设置超时读取时间 sp1.RtsEnable = true;//该值指示在串行通信中是否启用请求发送(RTS)信号 //定义DataReceived事件,当串口收到数据后触发事件 } //定义DataReceived事件,当串口收到数据后触发事件 public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e) { sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //this.Invoke就是跨线程访问ui的方法 this.Invoke((EventHandler)(delegate { if (rbnHex.Checked) { isHex = true; } else { isHex = false; } if (isHex == false) { tbxRecvData.Text += sp1.ReadLine(); } else { Byte[] ReceiveData = new Byte[sp1.BytesToRead];//创建字节数组 sp1.Read(ReceiveData, 0, ReceiveData.Length); //读取所接收到的数据 string RecvDataText = null; for (int i = 0; i < ReceiveData.Length; i++) { RecvDataText += ("0x" + ReceiveData[i].ToString("X2") + " ");//X为十六进制 2为每次都是两位数 这样看着整齐 } tbxRecvData.Text += RecvDataText; } sp1.DiscardInBuffer();//丢弃接收缓冲区的数据 })); } private void btnSend_Click(object sender, EventArgs e) { //写串口数据 if (isOpen) { try { sp1.WriteLine(tbxSendData.Text); } catch { MessageBox.Show("发送数据时发生错误!", "错误提示"); return; } } else { MessageBox.Show("串口未打开!", "错误提示"); return; } //检测要发送的数据 if (!CheckSendData()) { MessageBox.Show("请输入要发送的数据!", "错误提示"); return; } } private void btnOpenCOM_Click(object sender, EventArgs e) { if (isOpen == false) { if (!CheckPortSetting()) { MessageBox.Show("串口未设置!", "错误提示"); return; } if (!isSetProperty)//串口未设置则设置串口 { SetPortProperty(); isSetProperty = true; } try//打开串口 { sp1.Open(); isOpen = true; btnOpenCOM.Text = "关闭串口"; //串口打开后则相关的串口设置按钮便不可再用 cbxCOMPort.Enabled = false; cbxBaudRate.Enabled = false; cbxDataBits.Enabled = false; cbxParity.Enabled = false; cbxStopBits.Enabled = false; rbnChar.Enabled = false; rbnHex.Enabled = false; } catch { //打开串口失败后,相应标志位取消 isSetProperty = false; isOpen = false; MessageBox.Show("串口无效或已被占用!", "错误提示"); } } else { try //打开串口 { sp1.Close(); isOpen = false; isSetProperty = false; btnOpenCOM.Text = "打开串口"; //关闭串口后,串口设置选项便可以继续使用 cbxCOMPort.Enabled = true; cbxBaudRate.Enabled = true; cbxDataBits.Enabled = true; cbxParity.Enabled = true; cbxStopBits.Enabled = true; rbnChar.Enabled = true; rbnHex.Enabled = true; } catch { MessageBox.Show("关闭串口时发生错误!", "错误提示"); } } } private void btnCleanData_Click(object sender, EventArgs e) { tbxRecvData.Text = ""; tbxSendData.Text = ""; tbxSendData.Focus(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { System.Environment.Exit(0); }

ubuntu 串口打不开 配置不了

串口编程时出现: SetupSerial :: Input/output error 自己猜想原因可能是:ubuntu串口配置问题,如下图 ![图片说明](https://img-ask.csdn.net/upload/201512/23/1450855699_931660.png) 但是又改不了: 请问大神如何解决?

在fcntl.h头文件中找不到O_RDWR等open函数的参数

如标题所示,书上说的是在fcntl.h头文件中有定义,但坑爹的是我用vim搜了半天也没找到。。。我用的是Centos 7的系统,但是在写程序用到这些常量是没问题的, 编译也不会报错,也会正常运行。所以有可能是包含在其他的头文件中,希望知道的大佬告知一哈。

ubuntu下无法打开USB串口

有个串口的问题想请教各位一下。 问题背景:在ubuntu下跑识别apriltags程序,将处理后的信息用串口发出去。 出现问题:串口无法打开。 我已经做出的尝试: 1.最开始我用那台座机成功过一次。可以在电脑端用minicom串口调试助手,自发自收数据。 2.后来又修改了一些串口发送的通信程序,再去实验就不好用了。 3.接着去网上各种百度论坛答案,尝试着给串口安装pl2303驱动,发现并不好用。 当串口第一次插上电脑时,我用dmesg | grep tty命令查看链接状态,显示 lee@Tec:~/apriltags$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 372.482005] usb 1-6: pl2303 converter now attached to ttyUSB0 看网上说这是连接成功了。 然后跑程序,仍然时打不开端口。 在用这个命令查看,又出现了下面的问题: lee@Tec:~$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 372.482005] usb 1-6: pl2303 converter now attached to ttyUSB0 [ 589.802512] pl2303 ttyUSB0: pl2303_set_control_lines - failed: -19 [ 589.802674] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0 [ 593.838258] usb 1-2: pl2303 converter now attached to ttyUSB0 这时候连接不上了。 我以为是我的电脑端口坏了,然后换了一台电脑,仍不好用。 我又想可能我的程序不对,然后我重新下载Demo程序,仅仅修改打开串口部分,在自己电脑上实验仍然是不成功。 上述两个尝试在终端查看端口信息出现的现象是一样的,都是第一次显示好用,之后再查看就显示不好用了。 搞了昨天整整一天,最终还是没有解决问题,我想问一下各位网友写串口时有没有碰到类似的问题? 关于问题我的猜想: 程序问题:可是原来明明好用啊。。可能性不大, 电脑端口问题:台式机电脑上试过啊,也曾经好用。。 串口模块问题:换了几个U转串模块,后来都是这个现象啊。。。 大家看看是不是我遗漏了哪些问题? 互相交流,谢谢大家!

x86安卓开机后软件找不到串口,但是用串口调式助手可以打开串口?

x86安卓开机后软件找不到串口,然后打开串口调试助手再关闭,之后打开软件接可以连接到串口。

linux c fcntl函数返回值

if((val = fcntl(fd,F_GETFL,0))<0) ....... val |= O_NONBLOCK; if(fcntl(fd,F_SETFL,val)<0) ....... 设置非阻塞。 第三行为什么能这样设,val不是反回文件描述符fd么?

python3 用open打开并读取文件时 显示是乱码 怎么解决

``` #!/usr/bin/python # -- coding: utf-8 -- import os path_list = os.walk("e:\\3\\")#获取一个列表目录的对象 for root, dirs, files in path_list: for i in files: with open(os.path.join(root, i) ,'r',encoding='utf-8',errors='ignore') as fp: aa=fp.read() print(aa) print('执行完毕') ``` 蹼嶙兔汞崈yoe[o(╔mH ╝sH ╝nto(╔mH ╝sH ╝nto(╔mH ╝sH ╝nto(╔mH ╝sH ╝nHtHo(╔mH ╝sH ╝PJ╔o(╔mH ╝sH ╝nHtHPJ╔o(╔mH ╝sH ╝nto(╔mH ╝sH ╝nHtHo(╔mH ╝sH ╝ntHo (╔mH ╝sH ╝nHto(╔mH ╝sH ╝nHto(╔mH ╝sH ╝nHtHo(╔mH ╝sH ╝nto(╔mH ╝sH ╝nHtHo(╔mH ╝sH ╝o(╔mH ╝sH ╝nHtH ╔═ & FC$╔╔╔╔╔╔╔╔║╔ & F╔═╔ & F╔C$ ,皞. 捌#悹$悹║%癝╚班╚2P╗18╔╔0U黊0U黊╔╔%╗╔╚o(╔╚,{)Y╔0U黊╔&╝╔╝╔╝╗╔╗

mac 打开串口 tty.usbserial 卡住?

我用 java 调用 c++代码 : fd = open(path_utf, O_RDWR | flags); 其中 path_utf _是/dev/tty.usbserial,然后就一直卡在这个函数。没有调用c++之前,我自己用串口调试工具,是可以正常打开的。但是我调用了这句代码后,串口调试工具也打不开了,而且,mac重启也重启不了,必须长按关机键,在重启。请问这是怎么了?为什么连不上串口?

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

C++11:一些微小的变化(新的数据类型、template表达式内的空格、nullptr、std::nullptr_t)

本文介绍一些C++的两个新特性,它们虽然微小,但对你的编程十分重要 一、Template表达式内的空格 C++11标准之前建议在“在两个template表达式的闭符之间放一个空格”的要求已经过时了 例如: vector&lt;list&lt;int&gt; &gt;; //C++11之前 vector&lt;list&lt;int&gt;&gt;; //C++11 二、nullptr ...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

【阿里P6面经】二本,curd两年,疯狂复习,拿下阿里offer

二本的读者,在老东家不断学习,最后逆袭

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!...

作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)格子衬衫、常掉发、双肩包、修电脑、加班多……这些似乎成了大众给程序员的固定标签。近几年流行的“跨界风”开始刷新人们对程序员的...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐