[ECOS] ecos + lwip
Simon Kallweit
simon.kallweit@intefo.ch
Wed Aug 26 11:16:00 GMT 2009
Mandeep Sandhu wrote:
> Hi all,
>
> I'm writing my app which makes use of the lwIP stack to send/recv packets.
>
> I'm using lwIP that comes along with ecos-3.0 (which I think is ver 1.1.1).
>
> I started by looking at the "test" examples given with lwIP. I noticed
> that ALL examples
> create 2 threads. One which simply starts and calls the following
> functions and exits:
>
> lwip_init();
> sys_thread_new(...)
>
> The thread started as part of sys_thread_new does the main
> functionality of the app.
> From the source I saw that sys_thread_new() simply allocates resources necessary
> for starting the lwIP stack and then schedules the user function for execution.
>
> My question:
>
> * Does the lwIP stack run within the context of the thread started by
> sys_thread_new()?
No, lwip runs in a thread created in lwip_init(), which is called the
'tcpip thread' (lwip naming). The name is a bit misleading, as it
handles more than just tcpip, it's more like a central message queue
handler which syncs the different threads of the application to the
stack. The stack is not thread-safe by itself. The netcomm and socket
APIs thus use a message queue to communicate to the tcpip thread.
> * If my app has to start 2 threads, both creating separate sockets and
> send/recv data over
> it, then should only one of them be created with a call to
> sys_thread_new()? While the other
> one is started by our regular cyg_thread_create() and friends?
Threads that use lwip APIs (netcomm and sockets) *must* be created with
sys_new_thread(). Otherwise lwip's timeout mechanism will not work as
expected.
Simon
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss
mailing list