Autor Tema: Preguntas concretas sobre FreeRTOS.  (Leído 2297 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Preguntas concretas sobre FreeRTOS.
« en: 30 de Junio de 2010, 20:51:04 »
Hola, decido abrir este hilo para poder plasmar de manera ordena algunas preguntas que van surgiendo sobre el uso de este sistema operativo.

Como se crea una Tarea que sera ejecutada por una interrupción?
Sucede que no conozco que cuidados hay que tener con aquellas tareas que son ejecutadas por Interrupción.  Conocen algún ejemplo del cual me pueda guiar?.


Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Preguntas concretas sobre FreeRTOS.
« Respuesta #1 en: 02 de Julio de 2010, 19:08:57 »
Mas o menos lo que tienes que hacer es una tarea que se bloquee llamando a xSemaphoreTake(), luego en la ISR de la interrupcion correspondiente llamas a xSemaphoreGiveFromISR().
Si descargas el FreeRTOS, en la carpeta FreeRTOS\Demo\XXX\serial viene un ejemplo del driver de la UART que muestra con mas detalle como utilizar la interrupcion para que active la tarea. Tambien en la documentacion online de FreeRTOS sobre la funcion xSemaphoreGiveFromISR http://www.freertos.org/a00124.html

Yo no estoy seguro de haber entendido esto bien, pero creo que tener en cuenta que TaskISR puede tener o no una prioridad mayor que la tarea que se estaba ejecutando en el momenot de ocurrir la IRQ. Para eso la funcion tiene un argumento mas llamado xHigherPriorityTaskWoken

Saludos

Código: C
  1. xSemaphoreHandle sem;
  2.  
  3. ISR(){
  4.     xSemaphoreGiveFromISR( sem );
  5. }
  6.  
  7. TaskISR(){
  8.     while(1){
  9.         xSemaphoreTake( sem );
  10.         ...code...
  11.     }
  12. }
  13.  
  14. main(){
  15.     vSemaphoreCreateBinary( sem );
  16.     xTaskCreate( TaskISR );
  17.     vTaskStartScheduler();
  18. }

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Preguntas concretas sobre FreeRTOS.
« Respuesta #2 en: 02 de Julio de 2010, 19:44:19 »
Perfecto, muchas gracias por responderme jgpeiro06.

Entonces, la interrupción, sera una función como siempre la hacemos sin tener nada que ver con el FreRTOS, lo que hay que agregar en el ISR el GiveSemaphoreFromISR  para que ella pase a ejecución la tarea que esta esperando dicha interrupción.

GRACIAS!


 

anything