TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rogeliogamberro en 16 de Febrero de 2010, 15:45:25
-
Hola Foro!
Estoy haciendo una pruebas en un 18f4620 con ccs, glcd timers, ad y otros donde estoy un poco jugado con los tiempos. Decompile las funciones putc y printf y veo que estas quedan haciendo pooling hasta que el dato fue enviado y como mi trama puede ser muy larga pierdo muchisiiiiimooo tiempo... Les agradeceria un consejo de como solucionar mi problema... Les cuento que recibo del pc entre 3 y 10 bytes pero puede llegar a enviar 100 bytes o mas en un caso y debo mantener el refresco de la pantalla y leds... Gracias a todos por su ayuda y saludos.... :D
-
Podes usar interrupción para controlar cuando se ha enviado un dato. No podrás usar printf, tendrás que realizar otra función que en conjunto con la interrupción puedas ir mandando los datos.
Saludos!
-
Gracias por responder!!!
Ya lo he hecho de todas las maneras posibles. creo o que es o un error de concepto mio o debo hacer una nueva funcion putc y getc. Por ejemplo, por interrupciones, pongo una bandera y luego en el principal lo recibo... pero tengo el problema que al tener que refrecar la pantalla glcd y otros y, ademas, las funciones putc hacen pooling, se quedan trabadas hasta terminar de enviar el programa no funciona correctamente perdiendo datos, o trabandose el refresco... que me aconsejan que haga... las tramas de transmision pueden ser muy largas y no hay otra... como me aconsejan que modifique putc? uso buffers circulares? gracias totales...
-
La función debería leer un buffer y debe tener un puntero local como static, de esa manera se controla que byte enviar del buffer sin que se inicialice al ingresar a la función. La función cargaría un dato al registro TXREG y saldría. La interrupción setearía una bandera que será consultada por el main mediante un if, no un while porque sería los mismo que usar putc.
El GLCD si tenes la posibilidad de trabajarlo en modo fast creo que ayudaría también.
Saludos!
-
Muchas gracias Suki por tu respuesta... creo que entendi... voy a probar.... No sabia que se podia acceder a TXREG desde CCS... Voy a intentar esto: Cargar el dato en TXREG verificar pulsadores y actualizar pantalla y luego hacer el pooling manual si sobro tiempo... que os parece?
-
Para acceder al registro debes definirlo:
Puse 0x95 por poner algo, pero ahí va la dirección del registro según el microcontrolador que estés usando.
Saludos!