RobotStudio event

MULTITASKING

I set 3 tasks,namely MAIN which is the forground task for other task BACK1 which is again forground task for BACK2. I used a semaphore WaitUntil TestAndSet(tproutine_inuse) in every tasks.Then I put some lines of codes to print three sentences each in every task inside a while loop.When I execute the 3 tasks at the same time in continues cycle, then only the MAIN task is working.Why it is happening?In single cycle each task is working?
I need to know whether loops will work in forground background tasks in RAPID and is there any chance of deadlocks or preemption in RAPID programs.If so, will you please provide a reference manual for the examples of deadlocks or multithreading or concurrent programming in RAPID language. Given below are my three simple tasks.

MODULE MAIN

VAR num i;

PERS bool tproutine_inuse := FALSE;

PROC main()

WaitUntil TestAndSet(tproutine_inuse);

WHILE(i<=2) DO

TPWrite "First line from MAIN";

TPWrite "Second line from MAIN";

TPWrite "Third line from MAIN";

tproutine_inuse := FALSE;

ENDWHILE

ENDPROC

ENDMODULE


MODULE BACK1

VAR num j;

PERS bool tproutine_inuse := FALSE;

PROC main()

WaitUntil TestAndSet(tproutine_inuse);

WHILE(j<=2) DO

TPWrite "First line from BACK1";

TPWrite "Second line from BACK1";

TPWrite "Third line from BACK1";

tproutine_inuse := FALSE;

ENDWHILE

ENDPROC

ENDMODULE

 

MODULE MAIN

VAR num k;

PERS bool tproutine_inuse := FALSE;

PROC main()

WaitUntil TestAndSet(tproutine_inuse);

WHILE(k<=2) DO

TPWrite "First line from BACK2";

TPWrite "Second line from BACK2";

TPWrite "Third line from BACK2";

tproutine_inuse := FALSE;

ENDWHILE

ENDPROC

ENDMODULE


Best Answer

Answers