This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to modify this programe to see the difference between timeout and interval

#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.

Parents
  • I don't have time to test your code, but I think the differences are well documented.

    Timeout 5s means: the task waits for 5s
    Interval 5s means: the task executes every 5s independent of its execution time

    Little example in pseudo code:

    while (1)
    {
        wait(5s); // timeout or interval
        executeFunction(); // takes 2s to execute
        sendSignal(); // send a signal e.g. toggle LED
    }
    

    If you use timeout, the signal will be send every 7s (5s wait + 2s execution). If you use interval, the signal will be send every 5s (3s wait and 2s execution).

Reply
  • I don't have time to test your code, but I think the differences are well documented.

    Timeout 5s means: the task waits for 5s
    Interval 5s means: the task executes every 5s independent of its execution time

    Little example in pseudo code:

    while (1)
    {
        wait(5s); // timeout or interval
        executeFunction(); // takes 2s to execute
        sendSignal(); // send a signal e.g. toggle LED
    }
    

    If you use timeout, the signal will be send every 7s (5s wait + 2s execution). If you use interval, the signal will be send every 5s (3s wait and 2s execution).

Children
  • thanks Stefan Hartwig and Per Westermark
    help! when the message have been posted,I can not edit it again even if I find the error.

  • Yes, that's true - that is why it is so important that you pay attention to the Preview before you post the message!

    Now, you'll just have to re-post it: as a Reply in this thread - not as another new thread!

  • hi: Stefan Hartwig,I doubt your Little example

    
      while (1)
      {
        wait(5s); // timeout or interval
        executeFunction(); // takes 2s to execute
        sendSignal(); // send a signal e.g. toggle LED
      }
    
    

    Because I make an experiment by following little programe:

        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);
    
        }
    

    my result is that the signal will be send every 3s
    (2s wait for interval + 1s wait for timeout).The result is not that as my prediction:the signal will be send every 2s(1s wait for interval + 1s wait for timeout). the result is the same as following programe:

        while (1)    {
        os_wait (K_TMO, 200, 0);//wait  timeout for 2s
        os_wait (K_TMO, 100, 0);//wait  timeout for 1s
        os_send_signal (1);
    
        }
    

    So , I still can not express the difference between tbem in programe.The reality is contrary to the theory .

  • 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:

    |xxx     |xxx     |xxx     |
    

    Changing the delay to 2 ticks, would compensate:

    |xxx  |xxx  |xxx  |
    


    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  |