<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Task managment - Kill various tasks in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219453#M5741</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thanks amh.&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 31 Oct 2009 06:06:45 GMT</pubDate>
    <dc:creator>CarlFST60L</dc:creator>
    <dc:date>2009-10-31T06:06:45Z</dc:date>
    <item>
      <title>Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219428#M5716</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can someone give me some conceptual approachs to the most common way to have a parent task destroy its child tasks?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Basically, we have a 'main_task' that creates a heap of different tasks that have all sorts of drivers open (comm ports, SPI drivers, Flashx etc), some connect to external devices which are 'out of my control', all have I/O controllers to reset those devices. I need to add some software to my main task that will allow me to destroy all those tasks if something stops responding or act normally, however, i need my main task to keep running so i can report back errors and manage the reboot processes. If I cannot manage a reboot, I will need to reboot the entire processor.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What is 'the right' way to go about doing this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance,&lt;/P&gt;&lt;P&gt;Carl.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 03 Oct 2009 08:40:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219428#M5716</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-03T08:40:48Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219429#M5717</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Carl,&lt;/P&gt;&lt;P&gt;I dont understand you exactly what you mean. What's wrong about destroying tasks and closing device drivers?&lt;/P&gt;&lt;P&gt;Note that MQX does not use MMU, so there are global variables, that are initialized in bss segment and once you modify them, it is not possible to set it to default values, only by recopying bss segment to the memory.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 Oct 2009 17:50:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219429#M5717</guid>
      <dc:creator>JuroV</dc:creator>
      <dc:date>2009-10-09T17:50:07Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219430#M5718</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I guess the answer to my question is this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You can set an exit handler which will run when you call task_abort, that handler can close message queue, drivers, clean up varibles etc&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Carl.&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-09&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;10:51 PM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 10 Oct 2009 04:28:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219430#M5718</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-10T04:28:19Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219431#M5719</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;What is the 'correct method' for a complete reset while MQX is running i.e. equivilant of hitting the reset button?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have tried doing __boot(); but no luck as MQX is obviously aware its still running...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do I have to call _mqx_exit(x); and call __boot from there? Is there some command thats not in the userguide or reference manual?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(searching the source code on reset isnt much good as there are just to many 'reset' results)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Carl&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Oct 2009 07:03:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219431#M5719</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-22T07:03:20Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219432#M5720</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Since your peripherals are already configured somehow, I guess you want to initiate software reset to to return HW to initial state before MQX (re)booting. Here I've found some tips&amp;amp;tricks how to do it:&lt;/P&gt;&lt;P&gt;&lt;A href="http://forums.freescale.com/freescale/board/message?board.id=CFCOMM&amp;amp;message.id=44" target="_blank"&gt;http://forums.freescale.com/freescale/board/message?board.id=CFCOMM&amp;amp;message.id=44&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Oct 2009 15:59:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219432#M5720</guid>
      <dc:creator>PetrM</dc:creator>
      <dc:date>2009-10-22T15:59:16Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219433#M5721</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the link Pete.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Wow, so I guess MQX doesnt support a soft reset?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am suprised that the __boot(); / _mqx_init(); routines dont allow a soft reset... Could it be modified i wonder...? I know in the basic small processors we use, jumping to the reset vector is essentially the same as a soft reset, I guess there is another level to this in the 5225X?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would think a soft reset option is a must, I know if the worst happens, I want everything to completely restart.&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-22&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;10:40 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Oct 2009 16:36:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219433#M5721</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-22T16:36:43Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219434#M5722</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, you're right, there should be such (kernel) functionality. In fact, the BSP already services watchdog in _bsp_timer_isr(), so as workaround you can play with some no_service_watchdog flag inside the routine.&amp;nbsp;But more convenient API should be introduced by us anyway.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;On mcf5xxx processors, it's little more complicated then just jumping to _boot().&lt;/P&gt;&lt;P&gt;All interrupts, peripherals and "system" registers need to be disabled/reseted before MQX re-launch.&lt;/P&gt;&lt;P&gt;So it's easier to initiate watchdog failure for example.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Oct 2009 18:16:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219434#M5722</guid>
      <dc:creator>PetrM</dc:creator>
      <dc:date>2009-10-22T18:16:56Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219435#M5723</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hey Carl,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How would the main task detect if any child task needs to be aborted?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Oct 2009 04:51:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219435#M5723</guid>
      <dc:creator>MQXuser</dc:creator>
      <dc:date>2009-10-23T04:51:01Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219436#M5724</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi MQXUser,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is really application dependent. For our app, we have various hardware modules we communicate which are 'out of our control', there are case's where the software could call fatal errors which we log, and need to softreset if killing and restarting tasks fails to work. We also have hardware reset control and try to recover, but its mission critical that we can recover from anything unexpected. During development I have introduced bugs which cause errors I could not easily recover from causing MQX to do strange things so we need to be as careful as we can.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Carl&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-23&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;12:06 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Oct 2009 05:40:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219436#M5724</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-23T05:40:45Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219437#M5725</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have just quickly written up some very quick and easy test code to test the _task_abort(); and show its exit handler running (as there is no MQX examples at all).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For some reason the exit handlers do not run after _task_abort(); is called. I have tried a few things, can someone tell me why the exit handler isnt running?&lt;/P&gt;&lt;P&gt;&amp;nbsp;**Note: this is ment to be just quick test code, I know this is wrong in many ways its just to test the exit handler, also, if you want to run it you might need to change the LED to your BSP.&lt;/P&gt;&lt;P&gt;The code simply creates a a couple of tasks, sets exit handlers, once task3 see's any 3 char's from stdin, it sets an error flag. Then the main task see's the error flag and tries to _task_abort(task3) and _task_about(task2)... problem is, the exit handler never runs to close the files... I have tried many things but cannot seem to get it to work (order of code, timing,task priority etc)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;
/**HEADER********************************************************************
*
* Copyright (c) 2008 Freescale Semiconductor;
* All Rights Reserved                      
*
* Copyright (c) 1989-2008 ARC International;
* All Rights Reserved
*
***************************************************************************
*
* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
**************************************************************************
*
* $FileName:
* $Version :
* $Date    :
*
* Comments:
*
*   Simple _task_abort test progra
* The code will create a child task (task2), which will also create its own child task (task3)
* After 3 characters come in on stdin, the main task will see the error flag and attempt to abort and restart the tasks
*END************************************************************************/

#include &amp;lt;mqx.h&amp;gt;
#include &amp;lt;bsp.h&amp;gt;
#include &amp;lt;fio.h&amp;gt;


#if ! BSPCFG_ENABLE_IO_SUBSYSTEM
#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined non-zero in user_config.h. Please recompile BSP with this option.
#endif


#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED
#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option.
#endif

//some GPIO control for testing
#define STATUS_LED_1_PIN  (GPIO_PORT_TJ | GPIO_PIN7) //Status 1 pin, CHANGE THIS IF YOU WANT TO USE THE LED ON THE EVB AS THIS IS FOR CUSTOM HARDWARE

static FILE_PTR GPIO_FILE = NULL;

//Default state for STATUS outputs on power up
static uint_32 DEFAULT_GPIO_OUTPUT_STATE[] = {
 STATUS_LED_1_PIN  | GPIO_PIN_STATUS_1,    //Force output high as default
 GPIO_LIST_END
};
/* Task IDs */
//#define HELLO_TASK 5

extern void hello_task(uint_32);
void task2(uint_32);
void task3(uint_32);

//Exit handlers for tasks
void task2_exit_handler(_mqx_uint, pointer);
void task3_exit_handler(_mqx_uint, pointer);

TASK_TEMPLATE_STRUCT  MQX_template_list[] =
{
    {5, hello_task, 1500, 5, "hello", MQX_AUTO_START_TASK, 0, 0},
    {6, task2, 1500, 6, "task2", 0, 0, 0},
    {7, task3, 1500, 7, "task3", 0, 0, 0},
    {0,          0,          0,   0, 0,       0,                   0, 0}
};

_task_id task2_id_;
_task_id task3_id_;

static uchar errorflags = 0;
/*TASK*-----------------------------------------------------
*
* Task Name    : hello_task
* Comments     :
*    This task prints " Hello World "
*
*END*-----------------------------------------------------*/
void hello_task (uint_32 initial_data)
{
 printf("Hello_task: creating task2\n");
 task2_id_ = _task_create(0 ,_task_get_template_index("task2"), 0);
 if(task2_id_ == 0)
 {
  printf("Unable to create task2 \n");
  _mqx_exit(0);
 }

 // ** test code only ** Sit hear and wait for an error
 for(;;)
 {
  if(errorflags)
  {
   errorflags = 0;
   printf("hello_task: detected error state\n");
   printf("hello_task: aborting task2\n");
   if(_task_abort(task2_id_) != MQX_OK)
   {
    printf("hello_task: unable to abort task2\n!");
    fflush(stdout);
    _mqx_exit(0);
   }
   printf("hello_task: aborting task3\n");
   if(_task_abort(task3_id_) != MQX_OK)
   {
    printf("hello_task: unable to abort task3\n!");
    fflush(stdout);
    _mqx_exit(0);
   }
   printf("Waiting for tasks to abort\n"); //TASKS STOP, BUT THE EXIT HANDER NEVER RUNS
   _time_delay(5000);
   printf("hello_task: creating task2 as recovery from error\n");
   task2_id_ = _task_create(0 ,_task_get_template_index("task2"), 0); //Task runs, but as the files didnt close its wrong..
   if(task2_id_ == 0)
   {
    printf("hello_task: Unable to create task2 to recover from error\n");
    _mqx_exit(0);
   }  
  }
  _time_delay(1000);
  printf("tick\n");
 }
    _mqx_exit(0);

}

//made global to make it easy to fclose
pointer CommPortStream = NULL;

void task2(uint_32)
{

 uint_8 Comm_Data_To_Send[] = "AT\r\n";


 _task_set_exit_handler(task2_id_, task3_exit_handler);
 /*
 {
  printf("Task2 could not set error handler\n");
  _mqx_exit(0);
 }
 */

 CommPortStream = (pointer)fopen("ittyb:", (pointer) (IO_SERIAL_RAW_IO));

 printf("Task 2: Starting task3\n");
 fflush(stdout);
 task3_id_ = _task_create(0 ,_task_get_template_index("task3"), 0);
 if(task3_id_ == 0)
 {
  printf("Unable to create task3 \n");
  _mqx_exit(0);
 }

 for(;;)
 {
  fwrite(Comm_Data_To_Send, 1, 4, CommPortStream);
  _time_delay(2000);
 }

}
//Looks after closing up resources for task2
//NEVER RUNS
void task2_exit_handler(_mqx_uint, pointer)
{
 printf("****Task2 exit handler!****\n");
 fclose(CommPortStream);
}

void task3(uint_32)
{
 uint_8 i = 0;

 _task_set_exit_handler(task3_id_, _CODE_PTR_ task3_exit_handler);
 /*
 {
  printf("Task3 could not set error handler\n");
  _mqx_exit(0);
 }
 */

 if (NULL == (GPIO_FILE = fopen("gpio:write", (char_ptr) &amp;amp;DEFAULT_GPIO_OUTPUT_STATE)))
 {
  printf("Status LED File failed to open\n");
  _mqx_exit(0);
 }

 printf("THIS IS AN ECHO TEST PROGRAM\n");

 //After we get 3 characters in, set the error flag
 for(i = 0;i != 3; ++i)
 {
  if(getchar() == 'A') printf("Test\n"); 
  ioctl(GPIO_FILE, GPIO_IOCTL_WRITE_LOG0, &amp;amp;DEFAULT_GPIO_OUTPUT_STATE);
  _time_delay(1000);
  ioctl(GPIO_FILE, GPIO_IOCTL_WRITE_LOG1, &amp;amp;DEFAULT_GPIO_OUTPUT_STATE);
 }
 printf("Task3 setting error flag\n");
 errorflags = 1;
 //flash LED fast while in 'error state'
 while(1)
 {
  ioctl(GPIO_FILE, GPIO_IOCTL_WRITE_LOG0, &amp;amp;DEFAULT_GPIO_OUTPUT_STATE);
  _time_delay(0100); 
  ioctl(GPIO_FILE, GPIO_IOCTL_WRITE_LOG1, &amp;amp;DEFAULT_GPIO_OUTPUT_STATE);
  _time_delay(0100); 
 }
}

//Looks after closing up resources for task3
//NEVER RUNS
void task3_exit_handler(_mqx_uint, pointer)
{
 printf("****Task3 exit handler!****\n");
 fclose(GPIO_FILE);
}
/* EOF */&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;Here is the output from stdout&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Hello_task: creating task2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;Task 2: Starting task3&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;THIS IS AN ECHO TEST PROGRAM&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;tick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;atick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;tick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;tick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;btick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;tick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;ctick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;Task3 setting error flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;tick&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;hello_task: detected error state&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;hello_task: aborting task2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;hello_task: aborting task3&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;Waiting for tasks to abort&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;hello_task: creating task2 as recovery from error&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;Task 2: Starting task3&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;Status LED File failed to open&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;&amp;nbsp;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-23&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;05:09 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Oct 2009 11:05:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219437#M5725</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-23T11:05:59Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219438#M5726</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have the same problem as Carl.&lt;/P&gt;&lt;P&gt;In the task summary, the state from the task that is aborted is always "Terminating" and it stays like that forever.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Oct 2009 21:39:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219438#M5726</guid>
      <dc:creator>MQXuser</dc:creator>
      <dc:date>2009-10-23T21:39:29Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219439#M5727</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;BUMP.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Its quite important that I get this working ASAP, has anyone else been able to get the exit handler to run???&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Oct 2009 12:21:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219439#M5727</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-26T12:21:56Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219440#M5728</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Carl,&lt;/P&gt;&lt;P&gt;Not certain this is helpful or not so I apologize if not.&lt;/P&gt;&lt;P&gt;With one customer I helped, I setup the Backup Watchdog Module on the MCF52259 so that is the system dies for any reason, the device will reset since the Backup Watchdog does a hard reset.&lt;/P&gt;&lt;P&gt;I also used the core watchdog timer and if its isr routine is ever called, I generate a software reset.&lt;/P&gt;&lt;P&gt;One last point...with this customer we had implemented the Mass Storage USB Bootloader.&amp;nbsp; So each reset (Backup or core Watchdog) is flagged differently in the Reset Status Register so that the bootloader could determine to stay in bootloader mode or to jump to the FSLMQX application.&lt;/P&gt;&lt;P&gt;I hope to play with disabling and terminating a task soon but not certain it will meet your time frame.&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Oct 2009 21:43:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219440#M5728</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2009-10-26T21:43:06Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219441#M5729</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thanks David, that is helpfull for the resetting, but I our project is being held up until we can get the exit handler to run as per the above example.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Oct 2009 03:17:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219441#M5729</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-27T03:17:13Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219442#M5730</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Carl,&lt;/P&gt;&lt;P&gt;I've spent a few BTU's on this and think something is not happening correctly.&amp;nbsp;&amp;nbsp;I hacked a bit of PSP code and have asked our developers if what I'm doing is valid, lucky, or insane.&amp;nbsp; My hack allows me to&amp;nbsp;restart&amp;nbsp;a task&amp;nbsp;that just did a "return;".&amp;nbsp;&lt;/P&gt;&lt;P&gt;I did test also with _task_destroy(); which wipes the task from the task list altogether.&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Oct 2009 05:12:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219442#M5730</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2009-10-27T05:12:39Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219443#M5731</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;I just installed MQX3.4 this morning (fresh release), it now has an example of using the exit handler which I will try out now to see if i can get it working..&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Oct 2009 06:20:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219443#M5731</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-27T06:20:45Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219444#M5732</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Could you tell me where is the exit handler example located?&lt;/P&gt;&lt;P&gt;I did a quick search into the release notes and didnt find it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Oct 2009 06:50:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219444#M5732</guid>
      <dc:creator>MQXuser</dc:creator>
      <dc:date>2009-10-27T06:50:37Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219445#M5733</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi MQX, its in the MQXRM.pdf under _task_abort(); however, it is not complete... Page 350 for the 3.4 release.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is a much simpler example I just wrote up which does NOT call the exit hanlder.&amp;nbsp; The TAD does say the task is terminating, but thats all....&lt;/P&gt;&lt;P&gt;&amp;nbsp;PS: I tested the below example using _task_destroy instead of _task_abort and the task is destroyed based on TAD. But this is no good as it cannot fclose everything and clearn up other special functions..&lt;/P&gt;&lt;PRE&gt;
/**HEADER********************************************************************
*
* Copyright (c) 2008 Freescale Semiconductor;
* All Rights Reserved                      
*
* Copyright (c) 1989-2008 ARC International;
* All Rights Reserved
*
***************************************************************************
*
* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
**************************************************************************
*
* $FileName:
* $Version :
* $Date    :
*
* Comments:
*
*   Test task_abort, start a task, then abort it
*END************************************************************************/

#include &amp;lt;mqx.h&amp;gt;
#include &amp;lt;bsp.h&amp;gt;
#include &amp;lt;fio.h&amp;gt;


#if ! BSPCFG_ENABLE_IO_SUBSYSTEM
#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined non-zero in user_config.h. Please recompile BSP with this option.
#endif


#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED
#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option.
#endif

//Main task
void main_task(uint_32);
//Task 2
void task2(uint_32);
//Exit handlers for tasks
void task2_exit_handler(void);


TASK_TEMPLATE_STRUCT  MQX_template_list[] =
{
    {5, main_task, 1500, 6, "main_task", MQX_AUTO_START_TASK, 0, 0},
    {6, task2, 1500, 6, "task2", 0, 0, 0},
    {0,          0,          0,   0, 0,       0,                   0, 0}
};

/*TASK*-----------------------------------------------------
*
* Task Name    : hello_task
* Comments     :
*    This task prints " Hello World "
*
*END*-----------------------------------------------------*/
void main_task (uint_32 initial_data)
{
 _task_id task2_id_;

 printf("main_task: creating task2\n");

 task2_id_ = _task_create(0 , 6, 0);

 //Wait for 2 seconds before killing task2
 _time_delay(2000);

 printf("main_task: aborting task2\n");
 _task_abort(task2_id_);
 printf("Waiting for tasks to abort\n"); //TASKS STOP, BUT THE EXIT HANDER NEVER RUNS
 _time_delay(5000);
 printf("MQX Will now exit\n");
    _mqx_exit(0);

}

void task2(uint_32)
{

 _task_set_exit_handler(_task_get_id(), task2_exit_handler);

 printf("Task 2: Starting task2\n");

 for(;;) _time_delay(0100);

}
//Looks after closing up resources for task2
void task2_exit_handler(void)
{
 printf("****Task2 exit handler!****\n");
 fflush(stdout);
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Here is stdout log, its clear to see the exit handler does not work:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;main_task: creating task2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;Task 2: Starting task2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;main_task: aborting task2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;Waiting for tasks to abort&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;MQX Will now exit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-27&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;12:12 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-27&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;12:12 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-27&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;12:20 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Oct 2009 07:10:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219445#M5733</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-27T07:10:39Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219446#M5734</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Also, what happens if you call _task_destroy(_task_id) on a task that is in the middle of doing fopen("gpio:....) or similar? Will the recouce be tied up? How should this be handled? How exactly will MQX deal with this?&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;I have issued a service request based on this thread (_task_abort() issue with exit handers) but have had no response... I would have thought this would be pretty easy for the MQX guys to answer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-28&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;11:53 PM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2009 06:50:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219446#M5734</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-29T06:50:59Z</dc:date>
    </item>
    <item>
      <title>Re: Task managment - Kill various tasks</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219447#M5735</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How do we do _mutex_destroy(&amp;amp;mutex_struct); from a task other than the creater?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We can only get _mutex_destroy to work from the task that called _mutex_init()...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Basically, we need our task manager to destroy the mutex so it can start from scratch... btw, _mutatr_destroy() returns MQX_EOK, but _mutex_destroy() locks up when the MQX function trys to lock the mutex...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;The MQX_RM.pdf or example do no have any information on thi, and certainly doesnt say that only the creater can destroy.&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by CarlFST60L on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-10-29&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;03:24 AM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2009 10:22:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Task-managment-Kill-various-tasks/m-p/219447#M5735</guid>
      <dc:creator>CarlFST60L</dc:creator>
      <dc:date>2009-10-29T10:22:46Z</dc:date>
    </item>
  </channel>
</rss>

