Realizar acciones paralelas en un pic

Jaaaaaaaa, administras los hilos como en java... solo que en java le pones tread.

Precisamente las funciones que me describes son las que hago con mi administrador de tareas que hice en ensamblador.
Tengo rutinas ya listas para operar pantallas, teclados, sumas, restas, divisiones y multiplicaciones de 16 y 32 bits y adicionalmente puedo asignar el tamaño de la pila de cada tarea, tiempo de ejecucion y efectivamente, una funcion que libera la aplicacion para pasar a otra tarea. Pero todo en ensamblador.

Todo es perfecto, pero fijate que ahorita tengo mi nemesis, ya que precismante tengo que hacer un PID para controlar un motor. Coincidencias... Pero imaginate el problemon que estoy teniendo para hacer el punto fijo de la ecuacion de diferencias.
Una pregunta... el AVR studio soporta esas funciones???
 
Todo es perfecto, pero fijate que ahorita tengo mi nemesis, ya que precismante tengo que hacer un PID para controlar un motor. Coincidencias... Pero imaginate el problemon que estoy teniendo para hacer el punto fijo de la ecuacion de diferencias.

Pero no habías encontrado una biblioteca de aritmética en punto fijo?
El compilador CCS no tiene punto fijo pero tiene una muy buena y rápida implementación de punto flotante. Si el tiempo de muestreo no es demasiado pequeño, el punto flotante es "usable" sin problemas.

Una pregunta... el AVR studio soporta esas funciones???

No tengo la más minima idea, ya que no uso esos procesadores.
 
Última edición:
El AVRStuio no lleva nada de esto integrado, a diferencia del CCS. Sin embargo, el FreeRTOS para AVR está escrito precisamente para el WinAVR-GCC del AVRStudio, así que se puede usar sin problemas (www.freertos.org creo).

Respecto de la coma flotante o fija, la librería de math.h del WinAVR es inmediata, y está comprobado que los AVR tienen un rendimiento de entre 60 y 100 KFLOPs a 16MHz. Aún así, las veces que he hecho DSP con AVR he acabado haciendo coma fija 'a mano', mirando los bits, overflows, acarreos y demás, y aunque ha sido un trabajo arduo, el resultado es más que generoso en cuanto a prestaciones. Para un PID, hacer todo el cálculo dentro de la ISR es factible si se hace este procedimiento, mientras que la coma flotante igual precisa de tiempos excesivos para ser ejecutada dentro de una interrupción.

Esto de acuerdo respecto de la traducción de preventivo - expulsivo. Pero quizás la mejor traducción (muy libre, eso sí) sería la de transparente, ya que de esta manera las tareas se ejecutan como si fuesen una sola de manera muy transparente y con menos necesidad de conocer los requerimientos de otras tareas o del SO.

Ah, se me olvidaba. Un pequeño comentario respecto del punto fijo: los DSP de punto fijo tienen más instrucciones de cálculo y complicaciones que los de coma flotante. Y requieren un esfuerzo de programación mayor por parte del programador y/o compilador debido a todas las historias de acumulación, desbordamiento, números de bits, redondeo, etc. Por algo será. Por algo las librerías de cálculo suelen ser sólo en coma flotante.

Por cierto, para hacer matemáticas en coma fija y flotante, te recomiendo que las hagas en C (es muy fácil) y luego las compiles. El WinAVR genera un código ensamblador muy bueno y optimizado que puedes usar luego en tu programa.
 
Última edición:
Si por su puesto, si pense en hacerlo en C y al burro con los problemas del punto.
El detalle esta en que necesito controlar mas cosas, como una pantalla, teclado y cosillas asi. El asunto esta, que mi administrador de hilos, lo trabajaria perferctamente todo si no fuera por que tengo que trabajar decimales y negativos y demas. De hecho ya tengo trabajando el pid en C. Pero entonces, lo hago en C y no puedo hacer hilos, Lo hago en ensamblador pero no puedo trabajar los decimales. Tengo ese problema atorado y por eso es que estoy buscando alternativas y he ahi porque vine de metiche a este hilo y quise leer las opiniones de ezavalla.
Ahora. Las librerias que me comentan, son para C, mas seria genial encontrar algunas rutinas en ensamblador para punto fijo. Enn fin, no voy a desviar el tema con el punto flotante.

Ezavalla: No no he encontrado bibliotecas en punto fiijo, ya que los micros siempre los programo en ensamblador por los multihilos.
 
Y donde está el problema en copiar el código resultante en ensamblador una vez compilado el programa en C? Ctrl+C, Ctrl+V. Sólo es cuestión de encontrar ese ensamblado, pero existe, ya que lo hice (hace muuucho tiempo, ya no me acuerdo como).
 
Y donde está el problema en copiar el código resultante en ensamblador una vez compilado el programa en C? Ctrl+C, Ctrl+V. Sólo es cuestión de encontrar ese ensamblado, pero existe, ya que lo hice (hace muuucho tiempo, ya no me acuerdo como).

Esa es una excelente idea. :aplauso: :aplauso: :aplauso:
Probablemente sea un poco mas complicado que solo copiarlo, pero así vas a tener una excelente referencia para hacerlo.
 
Atrás
Arriba