Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Loading

setting up a UDP "connection" in the DEMO

Posted by biker126 on September 27, 2007
hello everyone!

now that I finally managed to adjust the freeRTOS/uIP demo (for LPC2368 under eclipse with GCC) I tried to make a "UDP task" but got some problems.

here's what I did so far:

1. adjusted folder structure of the project (every source is in the project folder now) --> webserver still works
2. switched from thumb to arm compiling mode --> webserver still works when I disable MAM (MAM is bugged for initial revision and revision A)
3. added my own task, a "dummytask" that only counts up a variable every 10 ticks (with "taskdelayuntil()") --> webserver still works

so far, so good :-)

now I replaced that basic dummy task with something more advanced. I set the UIP_CONF_UDP in uip_conf.h and include the "myTask.h" file. The Header files look as follows (just to give you a small overview of what I did).

######################## myTask.h: #######################

#ifndef MYTASK_H_
#define MYTASK_H_

#include "myApp.h"

void mytask( void* pvParameters);
void myapp_call(void);
void udp_config(void);

typedef struct udp_state uip_udp_appstate_t;

#ifndef UIP_UDP_APPCALL
#define UIP_UDP_APPCALL myapp_call
#endif

extern packet p;
extern packet* packet_ptr;

#endif /*MYTASK_H_*/

###################### myApp.h: ######################

#ifndef MYAPP_H_
#define MYAPP_H_

struct udp_state {
int emptyvar;
int nothing;
};
typedef struct my_packet {
unsigned long ticks;
unsigned long number;
} packet;
#endif /*MYAPP_H_*/

######################## myTask.c ######################

#include <math.h>
#include <string.h>

#include "FreeRTOS.h"
#include "Task.h"
#include "myTask.h"
#include "uip.h"

packet p;
int valid_data = 0;
packet *packet_ptr;

struct uip_udp_conn *udp_conn;


void mytask( void* pvParameters)
{
portTickType xLastWakeTime;
const portTickType xFrequency = 10;
portCHAR buf[20];
portLONG i = 0;
p.ticks = 0;
p.number = 0;


xLastWakeTime = xTaskGetTickCount();


for (;;)
{
vTaskDelayUntil( &xLastWakeTime, xFrequency );
i += 2;
if (i%10 == 0)
{
i = 0;
}
if (valid_data == 0)
{
// get ticks
p.ticks = xTaskGetTickCount();
// increase packt number
p.number++;
// indicate that p contains valid (= new) data now
valid_data = 1;
}
}
}

void myapp_call(void)
{
int lala = 5;
if ( uip_udp_conn->rport == HTONS(53) )
{
if ( uip_poll() )
{
if (valid_data == 1)
{
// set packet_ptr to address of uip_appdata (= the uip_buf[])
packet_ptr = (packet*) uip_appdata;
// clear the required memory
memset(packet_ptr, 0, sizeof(packet));
// write the data into the buffer
packet_ptr->ticks = p.ticks;
packet_ptr->number = p.number;
// send out the data
uip_udp_send(sizeof(packet));
// indicate that the data has been send
valid_data == 0;
}
}
if ( uip_newdata() )
{

}
}
}

void udp_config(void)
{
uip_ipaddr_t addr;
uip_ipaddr(&addr, 192,168,2,20);
udp_conn = uip_udp_new(&addr, HTONS(53));
}



the udp_config i call inside the uIP_Task (as the demo calls httpd() in there too) just befor the endless loop. I also adjusted the uIP_Task loop and added the sequence to call uip_udp_periodic() (an example for thats is provided with the uIP stack code/doc).

now my big problem is:
after these changes the uIP_Task gets STUCK when initialising the EMAC controller!!

the following while loop never gets "false" and thus the uIP_Task just sleeps endless (at least thats how it behaves. the other tasks, like LED and LCD still work and when i want to step _over_ that loop GDB stays on "running" mode)

while( Init_EMAC() != pdPASS )
{
vTaskDelay( uipINIT_WAIT );
}


sorry for the long post but maybe anyone got an idea what I'm doing wrong? maybe I missed to change a config-settings?

thanks in advance
D. Holzwarth

RE: setting up a UDP "connection" in the DEMO

Posted by Richard on September 28, 2007
There were some posts on this in the uIP mailing this this week - this might provide some useful examples.

Regards.

RE: setting up a UDP "connection" in the DEMO

Posted by biker126 on September 30, 2007
it seems to work now :-)

even tho I dont really know why it's working now and didn't work before ^^
maybe it got something to do with the unstable MAM of the LPC2368/78 ...


[ Back to the top ]    [ About FreeRTOS ]    [ Privacy ]    [ Sitemap ]    [ ]


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

Meet Richard Barry and learn about running FreeRTOS on RISC-V at FOSDEM 2019

Version 10.1.1 of the FreeRTOS kernel is available for immediate download. MIT licensed.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


Careers

FreeRTOS and other embedded software careers at AWS.



FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Renesas

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner