如果串口打开后,不对其执行关闭操作,会有什么后果呢?

xk2615@ 2009-12-09 04:48:46
如果串口打开后,不对其执行关闭操作,会有什么后果呢?
...全文
656 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xk2615@ 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 feihu521a 的回复:]

break直接就跳出while循环了,contiue才是跳出本次循环。

[/Quote]
这个break好像只能跳出switch,跳不出while(1)
ilovedrv 2009-12-10
  • 打赏
  • 举报
回复
while(1){***}

里面有break或者goto否
yzbsd 2009-12-10
  • 打赏
  • 举报
回复
下次就打不开了
firehood 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xh_jj 的回复:]
今天看到一个程序,是在一个子线程里面,
首先打开串口:fd=open_com(****);
紧接着是:  if(fd <0){报错}
然后是:    while(1){***}
之后是一个: if(close_com(***)=-1){报错}
我感觉最后那个关闭串口的操作是不是执行不到那里?前面是个死循环呢。
那如果程序由于某种原因重新启动,是不是会出现错误?
[/Quote]
if(close_com(***)=-1){报错} 这句话肯定执行不到啊,你可以在主线程关闭的时候终止这个子线程,并将串口端口关闭。
guopeixin 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xh_jj 的回复:]
今天看到一个程序,是在一个子线程里面,
首先打开串口:fd=open_com(****);
紧接着是:  if(fd <0){报错}
然后是:    while(1){***}
之后是一个: if(close_com(***)=-1){报错}
我感觉最后那个关闭串口的操作是不是执行不到那里?前面是个死循环呢。
那如果程序由于某种原因重新启动,是不是会出现错误?
[/Quote]
没看懂
firehood 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xh_jj 的回复:]
倒是有break,但我理解的是这也只能跳出本次循环,开始下一次while()的判断,不知对不对?
[/Quote]
break直接就跳出while循环了,contiue才是跳出本次循环。
wlc311 2009-12-10
  • 打赏
  • 举报
回复
那就被一个线程一直占用咯
MY_MCU 2009-12-10
  • 打赏
  • 举报
回复
下次再用找开命令时,会提示串口占用.不执行打开命令,则可直接收发数据.
happybeginner 2009-12-10
  • 打赏
  • 举报
回复
串口编程在kenrel的本质是文件系统层+串口芯片驱动层, 在kernel里面你可以看到其实所谓的open和close对应到串口芯片地驱动里面地代码只是把串口芯片地收发中断使能和关闭. 但是既然串口作为一个设备, 当然要遵从设备文件地基本属性, 看设备打开时用的参数. open后如果不关导致地后果你前面地写和后面地写会叠加输出. 前面的读和后面的读则会看输入数据进入串口接收buffer的时机.
xk2615@ 2009-12-10
  • 打赏
  • 举报
回复
while()
{
nread=com_read(***);
if (nread>0)
{
switch(X)
{
case a:
****
break;
case b:
****
break;
default:
break;
}
}
}
if(close_com(***)=-1){报错}
//倒是有break,但我理解的是这也只能跳出本次循环,开始下一次while()的判断,不知对不对?
xk2615@ 2009-12-09
  • 打赏
  • 举报
回复
今天看到一个程序,是在一个子线程里面,
首先打开串口:fd=open_com(****);
紧接着是: if(fd<0){报错}
然后是: while(1){***}
之后是一个: if(close_com(***)=-1){报错}
我感觉最后那个关闭串口的操作是不是执行不到那里?前面是个死循环呢。
那如果程序由于某种原因重新启动,是不是会出现错误?
tcdzyq 2009-12-09
  • 打赏
  • 举报
回复
如一二
宇帆 2009-12-09
  • 打赏
  • 举报
回复
下次打开 串口的时候 会提示被占用,以后可以直接对串口进行读写操作
firehood 2009-12-09
  • 打赏
  • 举报
回复
串口会一直被占用
rzsheng 2009-12-09
  • 打赏
  • 举报
回复
下次打不开
SPCOMM的主要属性,方法和事件 1.属性 CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。 BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。 ParityCheck:奇偶校验。 ByteSize:字节长度_5,_6,_7,_8等,根据实际情况设定。 Parity:奇偶校验位 pBits:停止位 SendDataEmpty:这是一个布尔属性,为true时表示发送缓存为空,或者发送队列里没有信息;为False时表示表示发送缓存不为空,或者发送队列里有信息。 2.方法 Startcomm过程用于打开串口,当打开失败时通常报错,错误主要有7种: ⑴串口已经打开 ; ⑵打开串口错误 ; ⑶文件句柄不是通讯句柄; ⑷不能够安装通讯缓存; ⑸不能产生事件 ; ⑹不能产生读进程; ⑺不能产生写进程; StopComm过程用于关闭串口,没有返回值。 函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean 用于发送一个字符串到写线程,发送成功返回true,发送失败返回false, 执行此函数将立即得到返回值,发送操作随后执行。函数有两个参数,其中 pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的长度。 3.事件 OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object 当输入缓存有数据时将触发该事件,在这里可以对从串口收到的数据进行处理。Buffer中是收到的数据,bufferlength是收到的数据长度。 OnReceiveError : procedure(Sender: TObject; EventMask : DWORD) 当接受数据时出现错误将触发该事件。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧