#include "rtx51tny.h" #include "REG935.H"
const unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 ,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x00};
int counter0; int counter1; int counter2; int counter3;
void LED0 (void) _task_ 0 { int i; os_create_task(1); os_create_task(2); while(1) {
for (i = 0; i < 15; i++) {
P1 = table[i]; os_wait(K_TMO,30,0);
} os_send_signal(1); os_wait(K_SIG,0,0); counter0++; } }
void LED1 (void) _task_ 1 { int i; while(1) { os_wait(K_SIG,0,0);
for (i = 0; i < 3; i++) { P1 = table[15];
os_wait(K_TMO,30,0);
P1 = table[16];
os_wait(K_TMO,30,0); } os_send_signal(2);
counter1++; } }
void LED2 (void) _task_ 2 { int i; while(1) { os_wait(K_SIG,0,0);
for (i = 0; i < 8; i++) { P1 = table[i] | table[i+7]; os_wait(K_TMO,30,0); }
os_send_signal(0); counter2++; } }
Here is my programe, you can emulate it by the KEIL. Opening the "peripheral"-->"I/O port"-->"P1".you will see the movement of the P1.
Now I want to use the os_wait(K_IVL,0,0) instead of the os_wait(K_TMO,0,0) to see the differnce between them.But I can not see the difference.So who can help me to modify the programe to show the difference clearly.
It seems like you do not want to read the manuals: The Interval is a variation of the Timeout. An interval is like a timeout except that the specified number of clock ticks is relative to the last time the os_wait function was invoked by the task.
Maybe its a good idea to use interval and timeout in the same task...
By the way: In RL-ARM it is explicitly forbidden to intermix interval and delay/timeout wait functions.
hi: I have read manual about them. But I have not been comprehensible to this sentence: The Interval is a variation of the Timeout. An interval is like a timeout except that the specified number of clock ticks is relative to the last time the os_wait function was invoked by the task.
It means that the interval is a timeout in the normal state , but which state the interval will not behaved like timeout?
In your little programe, the interval didnot behave like timeout.
while (1) { wait(5s); // timeout or interval executeFunction(); // takes 2s to execute sendSignal(); // send a signal e.g. toggle LED }
But in my programe ,the interval did behave like timeout.
while (1) { os_wait (K_IVL, 200, 0);//wait interval for 2s os_wait (K_TMO, 100, 0);//wait timeout for 1s os_send_signal (1); }
your programe is in this condition:
except that the specified number of clock ticks is relative to the last time the os_wait function was invoked by the task.
isn't is?
why?
Result of using a periodic timer with value 5 ticks, and having code that takes 3 ticks to execute:
|xxx |xxx |xxx |
Result of using a delay with value 5 ticks, and having code that takes 3 ticks to execute:
Changing the delay to 2 ticks, would compensate:
But what happens if the code takes 1 to 3 ticks randomly, and you try to compensate with a 2 tick delay?
|x |xxx |xx |xxx |x |