AnsweredAssumed Answered

Best way to pass simple data into a task

Question asked by Mitty McDoogle on Aug 21, 2015
Latest reply on Aug 27, 2015 by Carlos_Musich

I have a question about the best way to pass data into a task. I understand there is a message system for tasks, but I think the message system may be a bit overkill for what I'm trying to do. I have a board with multiple temperature sensors and I select which temperature sensor to read data from through a parameter I pass to 'temperatureRead' (see highlighted in red below). For example, to read temperature data from device 0, I call 'temperatureRead( 0 )'. To read temperature data from device 1, I call 'temperatureRead( 1 )'.

 

My question is whether or not my use of a global variable to specify the device (device 0, 1, 2, 3, 4, etc.) is the best way to accomplish what I am trying to accomplish. I like to avoid using global variables, but I also want a solution that is relatively simple.

 

void Temperature_task( uint32_t initial_data)

{

  void *event_ptr; // Events are used to block tasks when not needed

  if (_event_open("event.global", &event_ptr) != MQX_OK)

  {

  //TODO error message

  }

  while(TRUE)

  {

  // Go onto standby until a temp event is triggered

  if (_event_wait_all_ticks(event_ptr, TEMP_EVENT_MASK, 0) != MQX_OK)

  {

  printf("\nEvent Wait failed");

  _task_block();

  }

 

 

  // Lock the MUTEX to prevent too much communication across the I2C bus

  if (_mutex_lock(&i2c_mutex) != MQX_OK)

  {

  printf("Mutex lock failed.\n");

  _task_block();

  }

 

 

  temperatureRead( globalVariable );

 

 

  _mutex_unlock(&i2c_mutex); // Unlock the I2C MUTEX so that other tasks can use the I2C bus

 

 

  // Clear the event

  if (_event_clear(event_ptr, TEMP_EVENT_MASK) != MQX_OK)

  {

  //TODO error message

  } // end if( _event ...

  } // end while(TRUE)

} // end Temperature_task

 

 

Thanks,

Mitty

Outcomes