This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: Periodic execution of code in a thread context


John Dallaway wrote:
Steven Clugston wrote:
I need to have a function with some control code in it to execute at
regular and consistent intervals.
The way I've done this is just to create a thread and trap the execution
path in an infinite loop using while(1){some code;cyg_thread_delay()} or
for(;;){some code; cyg_thread_delay()}.

The trouble with this approach is [woes snipped]

I suggest you post on a semaphore from an alarm handler function. The regular thread can then wait on the semaphore each time round the loop rather than calling cyg_thread_delay().

http://ecos.sourceware.org/docs-latest/ref/kernel-semaphores.html

John's right, although you should naturally take care that you can deal with pre-emption of that worker thread by higher priority tasks, and/or that the operations that thread is then doing aren't ones that can be halted by some other thread (e.g. calls involving mutexes or other mutual exclusion protection, which includes library calls like C library, POSIX, file I/O etc.). Otherwise there's a chance that you take longer than the period between alarms. The (counting) semaphores mean you'll still have the correct number of events, but they won't be on time.


In other words, be careful with what you do and how long, in the worst case, it takes.

Jifl
--
--["No sense being pessimistic, it wouldn't work anyway"]-- Opinions==mine

--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]