Autor Tema: Pasar Float de rtos_msg_send() a rtos_msg_read() ya implementado  (Leído 1715 veces)

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

Desconectado giff

  • PIC10
  • *
  • Mensajes: 31
    • Ignogantes
Pasar Float de rtos_msg_send() a rtos_msg_read() ya implementado
« en: 16 de Febrero de 2010, 09:38:59 »
Me gustaría compartir el siguiente código en el que estuve trabajando ayer con CCS RTOS. Este codigo se puede utilizar para pasar un valor float con las funciones rtos_msg_send(task, byte).

Recordar que el parámetro que se puede pasar con la función anteriormente mencionada es de 1 byte y un dato tipo float ocupa 4 bytes por lo que hay que separarlo para enviarlo de una tarea a otra. La forma como lo enfoque fue mediante punteros y un ciclo for.

En la tarea que estará enviando el dato, en alguna parte tendrán que añadir el siguiente código:

Código: [Seleccionar]

void tarea_q_envia_dato()

   unsigned int8 i, *y;
   float valor_ms_ADC_f;
   #locate valor_float = 0x0214      ///el número 0x214 fue arbitrario, puede ser cualquiera dentro del rango de RAM disponible para el pic
   
   .
   .
   .
   código en cuestión
   .
   .
   .
   valor_float= f(x)                       ////// Represente a f(x) como cualquier asignación, función o procedimiento y donde se guarda el valor con punto flotante
        y=&valor_float;
        for(i = 0; i < 4; ++i){
        rtos_msg_send(tarea_que_recibe_dato,*y);
        *y=*y++;
        }


Luego, en la funcion de llegada, implementé el siguiente código:
Código: [Seleccionar]
   
void tarea_que_recibe_dato(){
   
   unsigned int8 i, z, *y;
   float var_retorno;
   #locate pot_msegs = 0x0218

         if(rtos_msg_poll()>0){ ///me cercioro que hayan datos en la cola de msjs

            y = &var_retorno;
               for(i = 0; i < 4; ++i)
               {
                z = rtos_msg_read();
               *y=z;
               *y = *y++;
                }


Y eso, intente de varias formas pero de esa manera pude enviar un dato tipo float de una tarea a otra. Quizas otra forma que le veo es tomar directamente el dato desde la dirección de RAM que asigné en la tarea de envio del dato float y me ahorro ram y código. Pero me sirvió mas de forma didáctica, espero depurar el código cuando tenga más tiempo y así mostrar mas opciones.

Cualquier ayuda lo agradecería como ya va siendo costumbre en este foro, he aprendido mucho gracias a ustedes ;D

Mi blog sobre apuntes de electrónica: www.ignogantes.net

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Pasar Float de rtos_msg_send() a rtos_msg_read() ya implementado
« Respuesta #1 en: 16 de Febrero de 2010, 12:39:13 »
Gracias por el aporte, seguro que será útil a alguien.