14-2
Task Inter-Task Messaging
Programmer’s Manual
In the above example, task B will be put on the head of task swapping queue before storing the registers value. The
then task C will be put after task B. So when all messages in task A are handlone input parameter function. The input parameter for
system will swap to task B. When all messages in task B are handled, systemtask id. for the task just swapped out and the input parameter for exitCallback will
swap to task C.
Note:
If UARTSend() or UARTReceive() is called, no task swapping
can be happened in any case until transmission or reception is
aborted. It is applied to all task swapping cases discussing in
this chapter.
14.1.1
With Delayed Task Swapping
In the diagram above, TaskApp1() will call SendMessage() to send a message to
TaskApp2(). However, the active TaskApp1() will not be swapped out. It will still
be active until it executes IrptGetData() as in arrow 1. Then, TaskApp2() will be
swapped back in as in arrow 2. Message from TaskApp1() will be received in
IrptGetData() of TaskApp2() as in arrow 3.
The task swapping happens when all messages in TaskApp1() are handled.
This will happen if SendMessage() or AdvSendMessage() with
SWAP_TASK_LATER are used. The target task will be push into the tail of main
task swapping queue if the target task is main task or the tail of sub task swapping
queue otherwise.
14.1.2
With Immediate Task Swapping
In AdvSendMessage(), if the flag is SWAP_TASK, message passing and task
swapping will happen inside AdvSendMessage() immediately if the pen is not
touching the panel.
14.1.3
With Immediate Task Swapping and Delayed Swap Back
In AdvSendMessage(), if the flag is SWAP_TASK_BACK_LATER, message
passing and task swapping will happen immediately inside AdvSendMessage() if
the pen is not touching the panel and the current task will be put into the head of
the task swapping queue. So when all messages are handled in target task, the
current task will be swapped back.
TaskApp1()
{
TaskInit();
while(TRUE)
{
switch(IrptGetData...
......
SendMessage(TaskApp2Id...
......
}
TaskApp2()
{
TaskInit();
while(TRUE)
{
switch(IrptGetData...
......
......
}
1
2
3
Personal Portable System Manager
Programmer’s Manual
13-9
be the task id. for the task swapping in
must be an
will be the
e.g. STATUS Entry(U32 previousTaskId); and STATUS Exit(U32 nextTaskId)
This function can be called outside or within the task. However, if it’s called within
the task, the entry routine is not executed and so it needs to be called after this
function.
Example 13-5 TaskHook() inside task
VOID EntryR(U32 oldId)
{
......
}
VOID ExitR(U32 nextId)
{
......
}
Task1()
{
Task1Init();
TaskHook(task1Id, EntryR, ExitR);
EntryR(0);
While(1)
....
}
If TaskHook() is called outside its task, the entry routine will be executed
automatically once the task is executed.
13.14
Stop task swapping
void
AppSwap
(U16
)
If
flag
is FALSE, no task swapping will be allowed by any means. If
SendMessage() or AdvSendMessage() is called after calling AppSwap(FALSE),
the message will be sent but no task swap later nor task swap immediately will be
executed. This function will increment a flag for task swapping, if it’s called with
FALSE several times, the same number of times AppSwap(TRUE) must be called
before task swapping is allowed.
F
Freescale Semiconductor, Inc.
For More Information On This Product,
Go to: www.freescale.com
n
.