What would happen if you have an os_wait or os_wait2 call with an interval of X milliseconds, such as while {TRUE) { os_wait2(K_IVL, X); //do some stuff } and the "stuff" takes more than X ticks?
What would happen if you have an os_wait or os_wait2 call with an interval of X milliseconds...and the "stuff" takes more than X ticks? The os_wait function will return immediately in this case. Each task includes a timer "delay" that decrements once for each timer tick. If you wait for 5 ticks, 5 is added to this tick (which starts at 0 for the first call to os_wait for an interval). And, the new value is 5. After 5 time ticks, the value will be 0 and the task will be run again. So, if you ask for an interval of 5 ticks and the current "delay" time is -5 or lower, the task will re-start immediately. So, if the interval is ALWAYS less than the stuff, no other tasks will run. Jon
Ah, maybe that was the problem: parallel tasks that I thought were executing weren't. Thanks Paul >The os_wait function will return immediately in this case. ... So, if the interval is ALWAYS less than the stuff, no other tasks will run.
This might actually be something to change in RTX51Tiny. If I have several tasks going on, and round-robin task switching turned off for efficiency, then there should be a "next_task" function that I can call simply to give other tasks a chance to execute when timing isn't critical. Calling "os_wait()" with a value of 0 would be sufficient. I rolled my own little RTS, before I could afford a copy of RTX51Tiny, and did just that. Each task would execute once through the "while (1)" loop and then pass control on to the next. Paul Blase
...there should be a "next_task" function that I can call simply to give other tasks a chance to execute... This is your lucky day. :-) There is such a function. It's called os_switch_task. Here's the manual page for it: http://www.keil.com/support/man/docs/tr51/tr51_os_switch_task.htm Jon
Arrgh, I knew that I missed something. Thanks. Paul
Ah, os_switchtask isn't in the manual, it must be a new feature. That's why I didn't find it. Thanks Paul