社区
Android
帖子详情
安卓读取串口数据出现堵塞
as1_2
2016-08-08 11:05:03
安卓app刚开始读取串口的数据是没有问题的,过了一段时间,发现界面数据不更新,点击界面提示无响应,串口一直在高频发送数据,但是app一直接收不了,好像被堵塞了?各位大虾,有没遇到过同样的问题?
...全文
630
7
打赏
收藏
安卓读取串口数据出现堵塞
安卓app刚开始读取串口的数据是没有问题的,过了一段时间,发现界面数据不更新,点击界面提示无响应,串口一直在高频发送数据,但是app一直接收不了,好像被堵塞了?各位大虾,有没遇到过同样的问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
玉怀一捧雪
2016-08-09
打赏
举报
回复
你问错版块了,去安卓开发的版块去问问题把。最好贴上源码
dingshi0375
2016-08-09
打赏
举报
回复
你好能交流下吗,我现在做了一个安卓app实现视频监控,另外从wifi模块串口读取数据这一块有问题,能留下联系QQ交流吗?或者加我QQ249634096
as1_2
2016-08-09
打赏
举报
回复
其中 byte[] SCI_DSP = new byte[8000]; 我做的是小型仪器的硬件开发的,主要做的是上层的应用,对这一块也不是太懂,测试时,只是个别仪器会出现卡死的情况,个别不会,如果底层发送数据的频率过快,而上层的安卓app接收串口数据不够快的话会不会出现堵塞的情况,从而造成界面卡死状态?有没谁也遇到过这样的问题?
as1_2
2016-08-09
打赏
举报
回复
下面是接收数据的主要代码 public void run() { while (true) { try { if (m_iPosStart >= m_iPosEnd) { //读取数据的起止位置 m_iPosStart = 0; m_iPosEnd = 0; } if (m_iPosEnd > AppConfig.MAX_REC_BUFLEN) {//最大的缓存数据 m_iPosStart = 0; m_iPosEnd = 0; } if (m_iPosEnd > AppConfig.MOVE_REC_BUFLEN) { StartEndOverMove();//数据缓存区起始位置移动的方法 } int len = mIS.read(SCI_DSP, m_iPosEnd, AppConfig.MAX_REC_BUFLEN - m_iPosEnd); /*** * 1.把数据缓存到SCI_DSP字节数组 */ if (len > 0) m_iPosEnd += len; Thread.sleep(60);//每个60毫秒接收一次数据 /*** * 2.判断缓存区的数组长度是否大于协议最小的长度,大于说明缓存了有用的数据 */ if (m_iPosEnd > (m_iPosStart + 9)) {//6+2 8个字节相当于协议头 +2字节(校验和+结束符)=10+至少一个字节的数据=11字节的数据 //无数据命令至少的字节数为10,就是说这个包存在有用数据时,检查数据是否完整 while (true) { int dataEnd = 0; /** * 2.1检查数据是否接收完整 * 完整则接收数据 */ dataEnd = chekData(SCI_DSP, m_iPosStart, m_iPosEnd);//检查数据是否接收完整的方法 //检查数据真实性及是否接收完整,dataEnd>0表示接收完整 if (dataEnd > 0) { int dataLen = dataEnd - m_iPosStart;//缓存的数据长度,初始时 m_iPosStart=0 byte[] data = new byte[dataLen]; System.arraycopy(SCI_DSP, m_iPosStart, data, 0, dataLen); m_iPosStart = dataEnd; Tool.printHex(data, 0, dataLen);//打印数据 // 接收数据(根据协议来接收) mRecordBuffered.onRecData(data);//接收数据 } else break; //接收数据不完整,跳出循环 } } } catch (Exception e) { e.printStackTrace(); //return; } } }
as1_2
2016-08-09
打赏
举报
回复
引用 2 楼 libin55 的回复:
你问错版块了,去安卓开发的版块去问问题把。最好贴上源码
哦,谢谢提醒
falloutmx
2016-08-09
打赏
举报
回复
程序缓冲爆了吧。
as1_2
2016-08-08
打赏
举报
回复
自己顶一下,哪位路过的大虾帮帮忙
android
安卓
读取
串口
安卓
手机,通过
串口
转蓝牙设备,
读取
串口
数据
,发送给
串口
数据
的
安卓
源代码
android开发
串口
,修改
串口
为非阻塞模式
最近用android_serialport_api开发了一个
串口
通讯程序,在使用过程中发现android_serialport_api基本构架都有 ,不过还有不少的缺陷,缺陷之一是:
读取
串口
信息是阻塞模式,在向
串口
发出命令后,如果没返回的话,
串口
将被阻塞 这样,如果在没
数据
返回的情况,线程将不能安全退出。缺陷之二是:没有停止位、奇偶校验位,停止位的设置。缺陷之三是:如果退出
串口
通讯后,下位机可能会在此发送信息到端口,下次马上进入时,会有上次残留
数据
。 在通过网络查找,参考各位大能给的信息,重新修改了SerialPort.c,修改了打开
串口
参数,满足设置停止位、奇偶校验停止位功能。 修改了端口
读取
阻塞模式为非阻塞模式,增加一个清除端口
数据
函数。同时已经编译过了,只要直接调用就行了。 在网上很多大神给的方案,方案多有,大都是源代码的修改,没有编译的。用本案例的话,应该可以完美解决了
读取
串口
的各种情况。
Android SerialPort
串口
读取
demo
Android SerialPort
串口
读取
demo,用于
读取
电子秤,小票机、外设扫码设备等,需要进行配置
android
串口
调用,使用c开发的,可以设置
串口
超时
android
串口
调用,使用c开发的,可以设置
串口
超时。比谷歌的
串口
demo好(谷歌的IO
堵塞
模式),也可以使用
堵塞
时
读取
不超时。
android下的
串口
读写及
数据
保存
支持多
串口
的选择,可以传输txt,hex格式!还可以保存为文件,serialport demo
Android
80,479
社区成员
91,390
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章