trem wrote:
> Jan Kiszka wrote:
>> Steven Kauffmann wrote:
>>> Hi
>>>
>>> When looking at the rtdm examples tut01-skeleton en tut02-skeleton, I have a
>>> question about the context_size in the rtdm_device struct.
>>>
>>> In tut01-skeleton-drv.c, the context_size = sizeof(buffer_t), in the other
>>> example context_size = 0. Both drivers uses the
>>> rtdm_safe_copy_to_user/rtdm_safe_copy_from_user functions to write/read data
>>> from buffer_t(kernel space) to user_space. So I don't understand why the
>>> context_size in tut02 is different than in tut01. Or is the context_size
>>> only important if we open the driver several times from one or more
>>> user_space programs?
>> The context size is important in case you want to attach some data to
>> each opened instance of a device. Hmm, but this is something neither
>> tut01 nor tut02 deals with optimally. tut02 cannot use a context-based
>> buffer, because it uses two device instances (opened by two instances of
>> the user space program) to transfer the data. But tut01 could use some
>> global buffer as well without loosing a feature.
>>
>> Philippe (trem), could you rework tut01 and make it use a global buffer
>> instead? Then some tut03 would be nice to explain what per context, per
>> device, and global data means. I've seen confusion about this fairly
>> often, so a dedicated tutorial would be great.
>>
>> Thanks,
>> Jan
>>
> Hi
> 
> I've used per device buffer in tut01 and global buffer in tut02 to show
> the difference between them. But it seems that it's not very clear. And
> as the tut01 is just here as first rtdm example, it should be as simple
> as possible.
> 
> So yes, using global buffer in tut01 and tut02 could be done, and I will
> add a tut03 to show the context.
> 
> tutorial index :
> - tut01 : first rtdm program
> you can read and write in this device (tut01-skeleton-drv01). All data
> are global, so I two program read it, they will read the same thing.
> 
> - tut02 : show synchronization
> you can only read in the device (tut02-skeleton-drv01) if a write has
> been done before (by this program or another program). data and
> semaphore are global.
> 
> - tut03 : show device context
> we can use tut01, and just put data to context. So a program can't read
> data written by another program. For example, P1 and P2 two programs.
> 
> with tut01, the sequence is :
> P1 : write "I'm P1" to tut01-skeleton-drv01
> P2 : write "I'm P2" to tut01-skeleton-drv01
> P1 : read  "I'm P2" from tut01-skeleton-drv01
> P2 : read  "I'm P2" from tut01-skeleton-drv01
> 
> with tut03, the sequence is :
> P1 : write "I'm P1" to tut03-skeleton-drv01
> P2 : write "I'm P2" to tut03-skeleton-drv01
> P1 : read  "I'm P1" from tut03-skeleton-drv01
> P2 : read  "I'm P2" from tut03-skeleton-drv01
> 
> 
> I'm on the right way ?

Basically, yes. But I would even put all three associations into the
same example, may be letting the tut-device user select the data
destination via an IOCTL: local, device, global. That would should
clearly the association - and would also introduce a first, simple IOCTL
mechanism.

> 
> If yes, I'll do it ASAP.
> 
> regards,
> Philippe
> 

Thanks,
Jan


_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to