Ejemplo con lwip + FreeRTOS

287 views
Skip to first unread message

caro

unread,
Mar 15, 2012, 10:31:05 AM3/15/12
to Embebidos32
Hola,

Estoy tratando de hacer funcionar el FreeRTOS + lwip 1.4.0 sobre el
LPCxpresso usando como ejemplo el Demo2
http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_IO/Demo_Applications/LPCXpresso_LPC1769/NXP_LPC1769_Demo_Description.shtml#Download_Link
para realizar una conexión TCP.

El procedimiento que seguí despues de muchos intentos, fue: Inicié un
proyecto nuevo, y agregué los archivos del FreeRTOS y de la lwip 1.4.0
más los drivers del LPC1768, finalmente todo compiló y agregué una
tarea que implementa un TCP echo server (telnet) (la copio más
adelante), mi problema es que primero no logro salir por la interfaz
ethernet osea en el wireshark no veo ningún paquete de mi placa y ni
riesgos conectarme a ella a través de telner y cada tanto salta a la
función void HardFault_Handler(void) del archivo cr_startup_Lpc17.c

Habilité todos los debugs y lo único que me muestra es lo siguiente:

Hola mundo
netif_set_ipaddr: netif address being changed
netif: IP address of interface netif: netmask of interface netif: GW
address of interface netif: added interface el IP addr 10.1.0.20
netmask 255.255.255.0 gw 10.1.0.1
netif: setting default interface el
pbuf_alloc(length=42)
pbuf_alloc(length=42) == 0x10005b74
NETIF: send pucChar 0x0 q->payload 0x10005b84 q->len 42 q->next 0x0


Alguno sabe que configuración me estaría faltando?

Muchas gracias por su atención y por su tiempo.

Slds.

Carolina.

P.S.

Les copio el código fuente de las tareas implementadas de un ejemplo
que encontré como para ubicarlos mejor en lo que estoy haciendo.

/*----------------------------------*/

int main(void) {

printf("Hola mundo\n");

tcpip_init(lwIPAppsInit, NULL);

xTaskCreate( vBasicSocketsTask, ( int8_t * ) "CmdInt",
configCOMMAND_INTERPRETER_STACK_SIZE, NULL,
configCOMMAND_INTERPRETER_TASK_PRIORITY, NULL );

vTaskStartScheduler();
return 1;
}

/*----------------------------------*/

void lwIPAppsInit(void *pvArgument) {

ip_addr_t xIPAddr, xNetMask, xGateway;
extern err_t ethernetif_init(struct netif *xNetIf);
static struct netif xNetIf;

(void) pvArgument;

/* Set up the network interface. */
ip_addr_set_zero( &xGateway );
ip_addr_set_zero( &xIPAddr );
ip_addr_set_zero( &xNetMask );

LWIP_PORT_INIT_GW(&xGateway);
LWIP_PORT_INIT_IPADDR(&xIPAddr);
LWIP_PORT_INIT_NETMASK(&xNetMask);

netif_set_default(netif_add(&xNetIf, &xIPAddr, &xNetMask, &xGateway,
NULL,ethernetif_init, tcpip_input));
netif_set_up(&xNetIf);
}

/*---------------------------------*/

void vBasicSocketsTask( void *pvParameters )
{

int32_t lSocket, lClientFd, lBytes, lAddrLen = sizeof( struct
sockaddr_in );
int8_t cInChar;
struct sockaddr_in sLocalAddr;
struct sockaddr_in client_addr;
const int8_t *pcWelcomeMessage = ( const int8_t * ) "FreeRTOS command
server - connection accepted.\r\n\r\n\r\n>";


( void ) pvParameters;

lSocket = lwip_socket( AF_INET, SOCK_STREAM, 0 );

if( lSocket >= 0 )
{
memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr));
sLocalAddr.sin_family = AF_INET;
sLocalAddr.sin_len = sizeof(sLocalAddr);
sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY);
sLocalAddr.sin_port = ntohs( ( ( uint16_t ) 23 ) );

if( lwip_bind( lSocket, ( struct sockaddr *) &sLocalAddr,
sizeof( sLocalAddr ) ) < 0 )
{
lwip_close( lSocket );
vTaskDelete( NULL );
}

if( lwip_listen( lSocket, 20 ) != 0 )
{
lwip_close( lSocket );
vTaskDelete( NULL );
}

while (1)
{

lClientFd = lwip_accept( lSocket, ( struct sockaddr * )
&client_addr, ( u32_t * ) &lAddrLen );

if( lClientFd > 0L )
{
lwip_send( lClientFd, pcWelcomeMessage, strlen( ( const char * )
pcWelcomeMessage ), 0 );
do
{
lBytes = lwip_recv( lClientFd, &cInChar, sizeof( cInChar ), 0 );

if( lBytes > 0L )
lwip_send( lClientFd, &cInChar, lBytes, 0 );

} while( lBytes > 0L );

lwip_close( lClientFd );
}
}
lwip_close(lSocket);
}

/* Will only get here if a listening socket could not be created. */
vTaskDelete( NULL );
}
/*------------------------------*/

Carlos Javier Balian

unread,
Mar 15, 2012, 1:02:00 PM3/15/12
to embeb...@googlegroups.com
Hola Caro:

No quiero decir tonter�as porque tambi�n estoy dando mis primeros pasos
con el LPC.
Hace bastante tiempo atr�s, y ya no me acuerdo mucho porque super� el
problema, recuerdo que ten�a una falla similar a la tuya.
El problema lo solucion� dejando de usar el "printf". Me refiero a que
dej� de tener problemas cuando elimin� el driver de debug que te permite
usar el printf con la consola de debug.
No me puse a analizar el problema para no perder mas tiempo e implement�
mis debugs usando la UART y la salida RS232 del micro, as� que mando los
mensajes por medio de ella a una terminal y listo.

Fijate si eliminando los drivers debug_printf.c logras destrabar el
problema.

Espero haber aportado algo

Saludos
Javier

El 15-mar-12 11:31 AM, caro escribi�:


> Hola,
>
> Estoy tratando de hacer funcionar el FreeRTOS + lwip 1.4.0 sobre el
> LPCxpresso usando como ejemplo el Demo2
> http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_IO/Demo_Applications/LPCXpresso_LPC1769/NXP_LPC1769_Demo_Description.shtml#Download_Link

> para realizar una conexi�n TCP.
>
> El procedimiento que segu� despues de muchos intentos, fue: Inici� un
> proyecto nuevo, y agregu� los archivos del FreeRTOS y de la lwip 1.4.0
> m�s los drivers del LPC1768, finalmente todo compil� y agregu� una
> tarea que implementa un TCP echo server (telnet) (la copio m�s


> adelante), mi problema es que primero no logro salir por la interfaz

> ethernet osea en el wireshark no veo ning�n paquete de mi placa y ni
> riesgos conectarme a ella a trav�s de telner y cada tanto salta a la
> funci�n void HardFault_Handler(void) del archivo cr_startup_Lpc17.c
>
> Habilit� todos los debugs y lo �nico que me muestra es lo siguiente:


>
> Hola mundo
> netif_set_ipaddr: netif address being changed
> netif: IP address of interface netif: netmask of interface netif: GW
> address of interface netif: added interface el IP addr 10.1.0.20
> netmask 255.255.255.0 gw 10.1.0.1
> netif: setting default interface el
> pbuf_alloc(length=42)
> pbuf_alloc(length=42) == 0x10005b74
> NETIF: send pucChar 0x0 q->payload 0x10005b84 q->len 42 q->next 0x0
>
>

> Alguno sabe que configuraci�n me estar�a faltando?
>
> Muchas gracias por su atenci�n y por su tiempo.
>
> Slds.
>
> Carolina.
>
> P.S.
>
> Les copio el c�digo fuente de las tareas implementadas de un ejemplo
> que encontr� como para ubicarlos mejor en lo que estoy haciendo.

> &client_addr, ( u32_t * )&lAddrLen );


>
> if( lClientFd> 0L )
> {
> lwip_send( lClientFd, pcWelcomeMessage, strlen( ( const char * )
> pcWelcomeMessage ), 0 );
> do
> {

> lBytes = lwip_recv( lClientFd,&cInChar, sizeof( cInChar ), 0 );
>
> if( lBytes> 0L )
> lwip_send( lClientFd,&cInChar, lBytes, 0 );

Mauro Antivero

unread,
Oct 8, 2012, 8:38:25 PM10/8/12
to embeb...@googlegroups.com
Carolina:

Disculp� la molestia pero estoy intentando hacer algo similar a lo que
vos dec�s pero no tengo idea de como empezar. Osea, bajo las fuentes del
lwIP, las de FreeRTOS... Y ah� me quedo.

C�mo hago para armar un proyecto con todo eso y que compile? Se que es
una pregunta muy general pero estoy bastante perdido. Todo lo que he
hecho hasta ahora es bajar workspaces que ya est�n armados y
funcionando, pero me gustar�a empezar de cero. Podr�as darme los
lineamientos generales como para hacer esto?

Te pregunto porque revisando la lista temas relacionados a lwIP veo este
correo tuyo de hace varios meses.

Por cierto, el IDE de mi preferencia es CoIDE, que es como casi todos un
derivado de Eclipse, as� que supongo que en l�neas generales es lo mismo
que para los dem�s IDEs.

Saludos y muchas gracias.

Mauro.

El 15/03/12 11:31, caro escribi�:
> Hola,
>
> Estoy tratando de hacer funcionar el FreeRTOS + lwip 1.4.0 sobre el
> LPCxpresso usando como ejemplo el Demo2
> http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_IO/Demo_Applications/LPCXpresso_LPC1769/NXP_LPC1769_Demo_Description.shtml#Download_Link
> para realizar una conexi�n TCP.
>
> El procedimiento que segu� despues de muchos intentos, fue: Inici� un
> proyecto nuevo, y agregu� los archivos del FreeRTOS y de la lwip 1.4.0
> m�s los drivers del LPC1768, finalmente todo compil� y agregu� una
> tarea que implementa un TCP echo server (telnet) (la copio m�s
> adelante), mi problema es que primero no logro salir por la interfaz
> ethernet osea en el wireshark no veo ning�n paquete de mi placa y ni
> riesgos conectarme a ella a trav�s de telner y cada tanto salta a la
> funci�n void HardFault_Handler(void) del archivo cr_startup_Lpc17.c
>
> Habilit� todos los debugs y lo �nico que me muestra es lo siguiente:
>
> Hola mundo
> netif_set_ipaddr: netif address being changed
> netif: IP address of interface netif: netmask of interface netif: GW
> address of interface netif: added interface el IP addr 10.1.0.20
> netmask 255.255.255.0 gw 10.1.0.1
> netif: setting default interface el
> pbuf_alloc(length=42)
> pbuf_alloc(length=42) == 0x10005b74
> NETIF: send pucChar 0x0 q->payload 0x10005b84 q->len 42 q->next 0x0
>
>
> Alguno sabe que configuraci�n me estar�a faltando?
>
> Muchas gracias por su atenci�n y por su tiempo.
>
> Slds.
>
> Carolina.
>
> P.S.
>
> Les copio el c�digo fuente de las tareas implementadas de un ejemplo
> que encontr� como para ubicarlos mejor en lo que estoy haciendo.

Alejandro Celery

unread,
Oct 8, 2012, 8:50:31 PM10/8/12
to embeb...@googlegroups.com
Para los dos:
LwIP es un muy buen stack TCP pero es medio un dolor de h�gado sacar
andando, yo en general estoy en contra de "arrancar de 0", si lo podes
tomar andando y te gusta como anda, perfecto, si le ten�s que hacer
algunas modificaciones, bien.
La mayor�a de los problemas suele estar con el driver del hardware. Lo
m�s simple de hacer es que conteste ping, dado que lo hace el stack sin
que vos tengas que decir ni p�o (bueno, solo init).
Otra cosa buena de ese stack es que contempla toooooodo el santo stack
TCP (esa cosa del first-class citizen que hab�amos hablado hace un
tiempo), as� que yo te dir�a que si est�s en LPCXpresso pongas un
breakpoint en el driver del hardware, le mandes un PING y veas qu� pasa.
Si eso anda bien, el resto es (comparativamente) juego de ni�os.

Saludos!

El 08/10/2012 09:38 p.m., Mauro Antivero escribi�:
> -- Recibiste este mensaje porque est�s suscripto al Grupo Google
> Embebidos32. Para postear en este grupo, escribe un email a
> embeb...@googlegroups.com. Para des-suscribirte, env�a un email a
> embebidos32...@googlegroups.com. Para m�s opciones, visita el
> sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

Reply all
Reply to author
Forward
0 new messages