with serial mac dev c windows serial-port

serial - La forma más fácil de implementar una Terminal Com Port.(Windows, C)



serial console on mac (1)

Necesito escribir un terminal para comunicarme con un puerto COM y necesito poder enviar comandos desde el puerto COM, al igual que desde la consola al mismo tiempo. (Quiero tener acceso a una computadora a través de dos nodos de sensor, que se comunican entre sí de forma inalámbrica, por lo que todavía necesito una forma de enviar algo desde el nodo a la computadora)

Ahora, he implementado una comunicación serial no solapada, pero no estoy seguro de cómo implementar la parte "Enviar y recibir al mismo tiempo" y solo tengo alrededor de 4 días para resolver el problema. Realmente no hay mucha información por ahí, por lo que agradecería cualquier sugerencia sobre cómo implementar la manera más rápida o más fácil.

La comunicación I / O solapada no es exactamente muy amigable para el tiempo, por lo que puedo ver. ¿Es posible hacer esto con multi-threading (solo superpuesto)? Supongo que en ese caso tendría que leer el búfer cada pocos ms y crear un hilo propio para la entrada.


Si el uso de E / S superpuesto o no es realmente el problema: la superposición simplemente libera algo de tiempo para su programa. He escrito muchos programas como este y la conclusión es siempre usar un hilo para manejar todas las rutinas COM. Si este subproceso llama a métodos superpuestos o síncronos es menos relevante, siempre que el hilo esté inactivo haciendo WaitForMultipleObjects ().

La forma en que escribí mi terminal COM más reciente es esta (pseudo):

thread() { while not kill the thread event { WaitForMultipleObjects (open port, close port, kill the thread event) if (open port) { send(); receive(); wait_for_send_and_receive(); } } } send() { take COM_port mutex if(there is something to send) { copy send_data to local_data, protect this with mutex WriteFileEx(COM_port, local_data, size, some_overlapped_struct_stuff); handle errors } release COM_port mutex } receive() { take COM_port mutex ReadFileEx(COM_port, ...); handle errors release COM_port mutex } wait_for_send_and_receive() { WaitForMultipleObjects (open port, close port, kill the thread event, send done event from send callback routine (overlapped I/O), receive done event from receive callback routine (overlapped I/O) ); }

Naturalmente, esto es una simplificación excesiva ya que necesita varias funciones para abrir / cerrar el puerto COM, barajar los datos, etc. Es probable que se necesiten varias mutcs.

Compartiría el código de producción real y funcional si no fuera propiedad de la empresa :( 4 días parece un poco optimista, a juzgar por el registro de mi proyecto, me llevó varios meses desarrollar un terminal de puerto COM funcional con un nivel de calidad de producción. El controlador del puerto COM solo está alrededor de 1k loc, con muchas llamadas de Win API por todas partes.