+1 - I agree with this thread.

https://issues.apache.org/jira/browse/MYNEWT-522

On 26 Dec 2016, at 10:26, Kevin Townsend wrote:

Hi Will,

Thanks for the feedback.

1) Unless you are the highest priority task, other tasks can run which could cause delays, and thus you are not waking up at the desired time.
Yeah, everything is based on the assumption that priority is resolved by design, and that the scheduling constraints are realistic and well understood in the system.
2) Using os_time_delay() and os_callout_reset() gives you a 1 os time tick resolution, so if your ticks are 10 msecs, you will be off by up to 9 msecs. A 1 msec ticker gets you off by up to 1 msec.

Using a task to post another task is a bit heavyweight; I would use a timer or a callout to do this. A timer would solve your “tick resolution” issue but would not solve the problem of a task wake up getting delayed.
A timer would be a valid solution as well, yes. I haven't looked seriously at the timer HAL yet, but I'll have a look right now and give it a try just to familiarize myself with it.

I saw earlier today that there wasn't PWM support and wanted to see if that was something that could be easily added to the timer HAL since it's a common requirement that should probably be included (motor control, dimming control, etc.). Different issue though!
It would not be hard to add an API to os_callout.c that could be used for this. Something like “os_callout_reset_at” or “os_callout_reset_tick” which you could pass in a specified os tick. Not sure what the API should do if you missed the os tick (return -1 and not post the task)? This would be simple code to use; just add the sample rate to the last time and call the new os_calllout API.
Personally, I think this would make a lot of sense and solve what is bound to be a common problem, and perhaps you can have a flag to define the behaviour when you miss the delay. Either you return an error code, OR you fire the task as soon as you can (though ideally still with a flag of some sort to know you're late), but having the option between the two should solve some problems.

K.

Reply via email to