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
