Any task that calls tcp_tick() needs to have a 4KB stack.
Make sure that any sockets you create are global in scope, and aren't an "auto" variable declared in a task. You will run into problems if you have a socket in a task's stack and you call tcp_tick() from another task.
Where does it crash? Can you run your program from the Dynamic C IDE/debugger and provide details on where it fails?