![](http://datasheet.mmic.net.cn/260000/PPSMMANUAL_datasheet_15946768/PPSMMANUAL_75.png)
13-8
Programmer’s Manual
This tool launches a task that has been created by the tool TaskCreate() or
AdvTaskCreate(). This routine never terminates. It takes the task identifier as input
argument and begins execution of the task. Since this tool may prevent the
application caller from executing again, it should always be called at the end of
main() to start the first task.
Example 13-4 Start a task
59
.
.
.
91
92
U32 SlideTask; /* Task id for slide */
/* Slide is the default task to be run when the system starts up */
TaskStart(SlideTask);
13.11
Termination of a Task
STATUS
TaskTerminate
(U32 taskId)
Termination of a task. The task identifier can be of a main or sub-task. All system
memory associated with the task and its sub-tasks that are allocated by PPSM
are freed, such as stack memory and screen, if any. Any memory that was
explicitly allocated by the task through Lmalloc(), Lcalloc() or Lrealloc(), is not
going to be freed by the system because that area may be shared by several
tasks. That area can be freed by calling Lfree() in application program.
A task cannot terminate itself. If it is a sub-task, it cannot terminate its parent task
either.
13.12
Task Reinitialization
STATUS
TaskReInit
(U32 taskId, U16 flag)
This tool will set the reinit flag in the specified task. If the flag is TRUE, whenever
the task is swapped in, it will start at the beginning of the task function. However,
application programmer needs to handle the cleaning up of memory in task
swapping using TaskHook().
In task swapping, the PC and stack, etc. will be restored to the value when the
task is not executed.
This function must be called immediately after TaskCreate() or AdvTaskCreate()
when the task is created. This function can be called to disable the task
reinitialization at anytime but cannot be called to enable the reinitialization again.
13.13
Task Hook
STATUS
TaskHook
(U32 taskId, P_VOID entryCallback P_VOID exitCallback)
This tool will hook the entryCallback() and exitCallback() functions to the specified
task. When the task is swapped in, the entryCallback() will be called after updating
the registers. When the task is swapped out, the exitCallback() will be called
Personal Portable System Manager
Programmer’s Manual
Task MaTask Management
13-5
Task Swapping Example
TaskAppA()
{
SubTaskCreate(&subTaskA1, ...);
SubTaskCreate(&subTaskA2,....);
AdvSendMessage(taskB, 0, SWAP_TASK_BACK_LATER);
.....
while(1)
{
IrptGetData(...);
....
}
}
TaskAppB()
{
SubTaskCreate(&subTaskB1,...);
SubTaskCreate(&subTaskB2, ...);
.....
While(1)
{
IrptGetData(....);
.....
}
}
SubTaskAppA1()
{
.....
While(1)
{
IrptGetData(....);
.....
}
}
SubTaskAppA2()
{
.....
AdvSendMessage(taskB, 0, SWAP_TASK);
.....
While(1)
{
IrptGetData(....);
.....
}
}
SubTaskAppB1()
{
.....
While(1)
{
IrptGetData(....);
.....
}
}
SubTaskAppB2()
{
.....
AdvSendMessage(taskB, 0, SWAP_TASK_LATER);
AdvSendMessage(taskA1, 0, SWAP_TASK_LATER);
AdvSendMessage(taskB1, 0, SWAP_TASK_LATER);
......
While(1)
{
IrptGetData(....);
.....
}
F
Freescale Semiconductor, Inc.
For More Information On This Product,
Go to: www.freescale.com
n
.