• Viernes 3 de Mayo de 2024, 10:53

Autor Tema:  cerrar puertos COM antes de usarlos  (Leído 3224 veces)

blasata

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
cerrar puertos COM antes de usarlos
« en: Lunes 19 de Abril de 2010, 22:30 »
0
Hola de nuevo,

tengo una duda, ¿se pueden cerrar los puertos COM que se habrieron en una ejecución anterior de un programa que finalizó incorrectamente (y que los dejó abiertos)?   :question:
esto me pasa al parar mi programa con Ctrl C, cuando vuelvo a cargar el programa no consigue arrancar los puertos. En concreto uso esto

Código: C
  1. DCB dcbLCD;  // estructura de configuracion
  2.     //HANDLE hLCD;
  3.     char dd[5];
  4.     //LPCSTR(COM_LCD) antes
  5.     sprintf(dd,"%s%c","COM",COM_LCD);
  6.     printf("LCD: accediendo a COM: %s n",dd);
  7. lab1:hLCD = CreateFile(dd, GENERIC_READ|GENERIC_WRITE, 0, NULL,OPEN_EXISTING, 0, NULL);// abrimos el puerto
  8.      if(hLCD == INVALID_HANDLE_VALUE) {
  9.              printf("Error al acceder al puerto serie LCDn");
  10.              escribelog("Error al acceder al Puerto COM LCD");  
  11.              Sleep(1000);
  12.              goto lab1;
  13.             }
  14.      else   { printf("Acceso correcto LCDn");
  15.               escribelog("Acceso correcto al Puerto COM LCD");  
  16.             }
  17.  
gracias de antemano :comp:
sí..uso goto :P

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: cerrar puertos COM antes de usarlos
« Respuesta #1 en: Martes 20 de Abril de 2010, 02:14 »
0
Al morir el proceso deberia descartar todos los HANDLEs ... fijate con el Process Explorer quien lo tiene abierto ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

blasata

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: cerrar puertos COM antes de usarlos
« Respuesta #2 en: Jueves 22 de Abril de 2010, 23:54 »
0
vale, para dar más detalles, tengo dos COM abiertos(pero 'virtuales') :
    -  mediante conversor USB uno.  
    -  otro también USB (en una placa con un chip ftdi).

Aparte también está la conexión de red por sockets en la tarjeta integrada de la placa (que es un conector que además tiene dos USB de los cuales uso uno para el USB conversor a serie).

Total lo raro es que al hacer Ctr-C hay veces que la conexión por sockets se cierra (lo veo en el servidor al que me conecto) y otras no. Es en estas veces que no se cierra 'bien' el socket cuando debo sacar los USBs y volverlos a pinchar. Al momento veo que se cierra el socket. Pero no sé por qué a veces sí y otras no, porque siempre hago Crt-C en el mismo punto del programa que es (está esperando):

Código: C
  1.  
  2. do  {  
  3.      }                                          
  4. while ( ( (Inp32(ESTADO))&(128) ) == 0 );
  5.  
  6.  

Nadie debería parar el programa así pero por si se les ocurre...

Pero estoy por no comerme más el coco, si dices que Ctr-C acaba con los handles, el problema debe ser ese los sockets..digo yo :blink: