Re: [9fans] rsc's libtask on embedded
I really like rsc's libtask and have managed to hide it in a few products. As for your question: What architecture? Any runtime available? Personally, I've used libtask on ARM/x86 under Linux/OSX... hardly bare metal though. The current implementation depends mostly on the ucontext API + berkeley sockets for net stuff. There's another project called http://libmill.org/ that is (was?) based on setjmp/etc that might be easier to port. Do keep me posted on your travels... I'm interested in this kind of stuff too. ...or maybe we should just all help Charles updating/minimizing Inferno... -joe On Thu, Jul 9, 2015 at 4:38 AM, Steve Simon st...@quintile.net wrote: Anyone stripped rsc's libtask for use on a bare metal embedded system, I'am about to do it but if somone already has I could steal it. -Steve
Re: [9fans] rsc's libtask on embedded
Russ implemented his own setmcontext and getmcontext functions to work on systems that doesn't properly support ucontext. So I don't think you really need ucontext support in your libc. By the way, I maintain an updated version of libtask: https://github.com/0intro/libtask I've used it on quite a few places over the years, but I only on POSIX systems so far. -- David du Colombier
Re: [9fans] rsc's libtask on embedded
David, it's good to hear you're keeping libtask updated... I'll check it out for sure! On Thu, Jul 9, 2015 at 11:09 AM, David du Colombier 0in...@gmail.com wrote: Russ implemented his own setmcontext and getmcontext functions to work on systems that doesn't properly support ucontext. So I don't think you really need ucontext support in your libc. By the way, I maintain an updated version of libtask: https://github.com/0intro/libtask I've used it on quite a few places over the years, but I only on POSIX systems so far. -- David du Colombier
Re: [9fans] rsc's libtask on embedded
Your use is different and simple enough that I would suggest doing this from scratch in pure C. Or start from an existing setjmp based implementation. It should really be a couple pages of code at most. On Jul 9, 2015, at 9:12 AM, st...@quintile.net st...@quintile.net wrote: co routines plus channels is exactly what I want.
Re: [9fans] rsc's libtask on embedded
BTW, somewhere I wired in TADNS (http://adns.sourceforge.net/) so libtask's network lookups didn't block. Let me know if you have any interest in me cleaning it up for use. -joe On Thu, Jul 9, 2015 at 11:09 AM, David du Colombier 0in...@gmail.com wrote: Russ implemented his own setmcontext and getmcontext functions to work on systems that doesn't properly support ucontext. So I don't think you really need ucontext support in your libc. By the way, I maintain an updated version of libtask: https://github.com/0intro/libtask I've used it on quite a few places over the years, but I only on POSIX systems so far. -- David du Colombier
Re: [9fans] rsc's libtask on embedded
Sounds like all you want are coroutines (with create, destroy switch-to calls) and wait queues (with create, destroy, signal wait calls). With these you can build channels easily. With a bit more work you can even implement pre-emption but then you need mutexes. Setjmp/longjmp is fine (that was I did in my first version ages ago!). On Jul 9, 2015, at 7:50 AM, Steve Simon st...@quintile.net wrote: The system I am trying to add libtask to has no runtime other than libc. Corrently it is an even based system that uses a min main loop and a twisty maze of nested state machines that all look the same. Hence my desire to add co-routines + channels (i.e. exactly what libtask is) to it. I have no need for the file or network modules but those are easily removed. I don't have the context calls but I do have setjmp/longjmp so that is what I am trying to use. I will shout if it works out. -Steve
Re: [9fans] rsc's libtask on embedded
One other thing that I've looked at but never used is Adam Dunkels' protothreads (http://dunkels.com/adam/pt/) although you'd still need to roll your own channel library. On Thu, Jul 9, 2015 at 10:50 AM, Steve Simon st...@quintile.net wrote: The system I am trying to add libtask to has no runtime other than libc. Corrently it is an even based system that uses a min main loop and a twisty maze of nested state machines that all look the same. Hence my desire to add co-routines + channels (i.e. exactly what libtask is) to it. I have no need for the file or network modules but those are easily removed. I don't have the context calls but I do have setjmp/longjmp so that is what I am trying to use. I will shout if it works out. -Steve
Re: [9fans] rsc's libtask on embedded
all process-like implementations except if they give up on per-cpu multiprogramming are setjmp based at heart. - erik On Jul 9, 2015 09:31, Bakul Shah ba...@bitblocks.com wrote: Your use is different and simple enough that I would suggest doing this from scratch in pure C. Or start from an existing setjmp based implementation. It should really be a couple pages of code at most. On Jul 9, 2015, at 9:12 AM, st...@quintile.net st...@quintile.net wrote: co routines plus channels is exactly what I want.
[9fans] rsc's libtask on embedded
Anyone stripped rsc's libtask for use on a bare metal embedded system, I'am about to do it but if somone already has I could steal it. -Steve
Re: [9fans] rsc's libtask on embedded
I looked at proto, they are just state machines pretending to be threads (imho) - not my style. libtask for me, I hope I can slice it a little and put the non-bear-metal bits in seperate files so I can offer the changes back. co routines plus channels is exactly what I want. -Steve On 9 Jul 2015, at 16:58, Joseph Stewart joseph.stew...@gmail.com wrote: One other thing that I've looked at but never used is Adam Dunkels' protothreads (http://dunkels.com/adam/pt/) although you'd still need to roll your own channel library. On Thu, Jul 9, 2015 at 10:50 AM, Steve Simon st...@quintile.net wrote: The system I am trying to add libtask to has no runtime other than libc. Corrently it is an even based system that uses a min main loop and a twisty maze of nested state machines that all look the same. Hence my desire to add co-routines + channels (i.e. exactly what libtask is) to it. I have no need for the file or network modules but those are easily removed. I don't have the context calls but I do have setjmp/longjmp so that is what I am trying to use. I will shout if it works out. -Steve
Re: [9fans] rsc's libtask on embedded
The system I am trying to add libtask to has no runtime other than libc. Corrently it is an even based system that uses a min main loop and a twisty maze of nested state machines that all look the same. Hence my desire to add co-routines + channels (i.e. exactly what libtask is) to it. I have no need for the file or network modules but those are easily removed. I don't have the context calls but I do have setjmp/longjmp so that is what I am trying to use. I will shout if it works out. -Steve