saludos.... estoy haciendo una aplicacion que pide datos a un pic por el usb....todo funciona perfecto, pero encontre que el envio y recepcion de datos los realiza mi aplicacion cada 50 ms y necesito que sea mas rapido (1 mseg seria genal ), buscando en la red encontre que es windows el que se tarda esos 50ms y dicen que una opción seria usando los timers de multimedia que tienen un mayor resolucion pero no entiendo muy bien como utilizarlos, alguien sabe como se usan o alguna idea de como bajar el tiempo de 50ms
se tarda 50ms en volver a pedir un dato al usb , mi codigo no creo que se tarde 50 ms , de hecho lo unico que hace es estar pidiendole datos al usb y los ponen en pantalla , lo que necesito es que en cada llamada al timer pida datos al dispositvo usb ( el pic) lo mas rapido posible y el pic no creo que se tarde tanto en enviar los datos
en realidad la primera aplicacion que hice esta en un bucle, y lo unico que hace es pide datos al usb imprime en pantallapero aun asi se tarda esos 50msluego hice una aplicacion que utiliza los timers normales y asi se tarda menos pero aun no es suficiente....en cuanto a los hilos, no se muy bien como hacerlo asi, por eso buscaba los timers de multimedia que dicen tienen una mejor resolucion (creo que de 1ms o algo asi)
alguna idea de como acelerar el proceso?
6- Interrelacionado con lo anterior, no usuaria la función int ResultadoPIC() y haria la implementación directamente en el código para evitar los excesivos cambios de contexto que pueden llegar a ser desgastantes debido a que los llamados se hacen X veces desde el loop.
Tu solucion iria bien pero me parece que el problema es diferente, no quiere obtener una lista de valores e imprimirlos sino mantener un valor actualizado (solo) en la pantalla. Al menos es lo que entendi yo, si fuera asi es mejor hacerlo con varios hilos encargados de cada tarea, siempre tendria un delay en la parte de output pero el input del PIC siempre llegaria a completarse. Si es que necesita obtener muchos valores y despues imprimirlos es mejor hacerlo como decis, obtenerlos todos en un bucle, almacenarlos y finalmente procesarlos.
xx- para que haces esto?receive_buf[1]*256estas seguro que eso es lo que quieres?
Si es un problema de ejecucion en tiempo real entonces hay que usar un S.O. que lo permita y no Windows
Supongo que cuando dices "Windows" te refieres a Windows 95/98/Millenium/NT/2000/XP/vista... Windows CE es un sistema operativo en tiempo real, .Pero es cierto, tienes razón, aunque no cabe duda que Windows (no CE) proporciona una serie de funciones que permiten cierto control en tiempo real de los programas, tiene una API bastante potente en ese aspecto....
esto lo hago porque en receive_buf[0] y receive_buf[1] estas los resultados de la conversion analogica digital lols cuales son de 10 bits, los 8 menos significativos estan en receive_buf[0] y los 2 mas significativos estan en receive_buf[1] (lo del 256 es para darle un desplazamiento de 8 bits)
Ya que retoman lo de QueryPerformanceCounter and QueryPerformanceFrequency, las clases que usa DirectX en DXUtil estan implementadas haciendo uso de estas dos funciones de la API de windows. .