I think cyg_drv_dsr_lock() will block the loop, because You need the DSR to update the variable and to release the wait-funcion.

I think, the best option may be to modify the condition cyg_drv_cond_wait() so, that it rememers an signal after the initialisation. If so, it would work fine.

I don't know, where it is interessting to forget signals...

Oliver


----- Original Message ----- From: "Derek Bouius" <[EMAIL PROTECTED]>
To: "'oliver munz @ s p e a g'" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Thursday, February 16, 2006 9:07 PM
Subject: RE: [ECOS] How to debug synchronisation in the usbs.c in a new usb-driver for the ARM at91sam7s...


I just tried implementing it with event flags, and it works fine too, with no noticable performance difference.

Gary, I have studied the different options but I can't determine why this is a heavier solution. It seems like the only possible
one.
Any other method with condition variables ends up in a race condition deadlock. (Please correct me if I'm wrong though!)

Just doing some more reading about the cyg_drv_cond_wait()... "Note that this function performs an implicit scheduler unlock/relock sequence, so that it may be used within an explicit cyg_drv_dsr_lock()...cyg_drv_dsr_unlock() structure." What if we did the dsr_lock/unlock around the while loop? I'll have to try it.

Derek


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

Reply via email to