init(netif) doesn't exist in IwIP 1.1.0?

nobody wrote on Wednesday, October 18, 2006:

I tried to compile the SAM7 Rowley Web Demo(IwIP) but the board’s Ethernet didn’t show any signs of life.The other tasks seems to work O.K. After some search in the code and a few debug msgs on UART I found that the source of the problem was the code below:
  In file netif.c

  /* call user specified initialization function for netif */
  if (init(netif) != ERR_OK) {
    return NULL;

The code simply stuck here when the init(netif) is called. In project’s .elf file it jumps to an address that it doesn’t seem to have any meaning:

       4718       bx r3
       46C0       mov r8, r8
       B5F0       push {r4-r7, lr}
  struct pbuf *p, *q = NULL;
  u16_t i;
  pbuf_pool = (struct pbuf *)&pbuf_pool_memory[0];
       4810       ldr r0, [pc, #0x040]
       4B10       ldr r3, [pc, #0x040]
       6018       str r0, [r3, #0x00]
  LWIP_ASSERT("pbuf_init: pool aligned", (mem_ptr_t)pbuf_pool % MEM_ALIGNMENT == 0);
  lwip_stats.pbuf.avail = PBUF_POOL_SIZE;
       4910       ldr r1, [pc, #0x040]
       2204       movs r2, #0x04
       23A8       movs r3, #0xa8

Maybe the compiler is trying to change mode Thumb–>ARM? I really don’t understand.

I searched a bit but I couldn’t find where’s the function’s code. Any clues anyone? Did anybody have the same problem?

nobody wrote on Wednesday, October 18, 2006:

init() is a callback function supplied as a parameter to netif_add().  In the lwIP demo, init calls ethernetif_init() which is a standard lwIP function.  ethernetif_init() in turn calls low_level_init() which is where the MAC/PHY initialisation specific to the hardware is performed.  This will be where you code is not returning from, it contains the following loop:

    while( xEMACInit() == NULL )
        __asm( "NOP" );

which it runs at a low priority (so the other tasks continue to run while it is waiting for the MAC/PHY initialisation to complete).

nobody wrote on Wednesday, October 18, 2006:

Thank you very much for the help I do appriciate that,but you didn’t tell me where’s the init’s code.

nobody wrote on Wednesday, October 18, 2006:

You can just search the source code for xEMACInit or low_level_init then you find it.  it all under demo/lwIP_Demo_Rowley_ARM7.