FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [September 2007 Threads] setting up a UDP "connection" in the DEMOPosted 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 DEMOPosted 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 DEMOPosted 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 ...
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|