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] [July 2008 Threads] Serial-Ethernet bridge (Using lwIP on str91x)Posted by Vinay Verma on July 18, 2008 I have been struggling with the implementation of a "Serial-Ethernet bridge" for quite few weeks. If anyone has an idea kindly reply on the following query (Thanks in Advance):
On sending continous data (@115200) on the serial port (UART async rs232) for around 7-8 hrs, the serial interrupt stops triggering (I have verified this by putting a break point in the UART IRQ handler routine, when the problem occured. I am using IAR embedded workbench).
Following is the implementation:
- The UART IRQ handler fills the data into a queue (using xQueueSendFromISR). - A free running task keep waiting on the queue & whenever there is any data in the queue, it forwards it to the TCP (tcp_write & tcp_output). - This bridge is just a part of the system, in all there are around 10 tasks running in the system.
Kindly reply if anyone has an idea.
RE: Serial-Ethernet bridge (Using lwIP on strPosted by Çağlar Akyüz on July 18, 2008 Maybe you're not freeing some pbufs, or some other task is disabling serial interrupts after some time. IMHO, these kind of problems are hard to track. If I were you, I would:
1st : Remove all other tasks and just forward data to the ethernet port. This will help localizing the problem. 2nd : Check if ethernet is working after serial interrupts stop working.
Regards, Caglar
RE: Serial-Ethernet bridge (Using lwIP on strPosted by Vinay Verma on July 18, 2008 Hi Caglar,
you are write. I have already made a setup running with only the bridge task..I may have results after another 7-8 hrs..btw ethernet was working when the serial interrupt stopped....I would share the results tomorrow morning (my morning INDIA :)..Thanks for the reply..
bbye, vinay
RE: Serial-Ethernet bridge (Using lwIP on strPosted by damien h on July 23, 2008 Hi Vinay,
I had a problem like this : when i was enabling a RTC interrupt on my STR912, my software was reseting after 3-4-6 hours of running... I don't know if you are in this case or not...
Maybe the following thread could help you: http://sourceforge.net/forum/forum.php?thread_id=2116003&forum_id=382005
OtherWise: the usual problem of stack overflow could be interesting to check, if not already done...
I write the following code to look the memory usage of each task, the function is the following (this function locate in the stack the last: 0xa5a5a5a5)(To use it, you need to cut - copy the structure definition: tskTCB to a *.h file to 'export' the type)(UTILS_TRACE_STACK is used as a printf function (vsprintf) to send debug info to an hyperterminal)
Another thing you can check is the stack available in IRQ mode.
Regards.
Damien
/** ************************************************************************************** * \fn u8 UTILS_PrintStackUsage (xTaskHandle TaskHandle) * \brief This function will print (trough RS232) information about stack usage on a dedicated task ************************************************************************************** * ************************************************************************************** * \return Always 0 ************************************************************************************** */ u8 UTILS_PrintStackUsage (xTaskHandle TaskHandle) { tskTCB *TaskStack = (tskTCB*)TaskHandle;
u32*CurrentCell;
if (TaskHandle != NULL) { //print direct available info UTILS_TRACE_STACK2("---- %s ----",TaskStack->pcTaskName); UTILS_TRACE_STACK3("Stack Start - End : 0x%.8x - 0x%.8x",TaskStack->pxStack,TaskStack->pxTopOfStack);
// init the current memory cell on the beginning of the task CurrentCell = TaskStack->pxStack;
while ( (*CurrentCell == 0xa5a5a5a5)&& (CurrentCell <= TaskStack->pxTopOfStack)) { CurrentCell++; }
UTILS_TRACE_STACK3("Stack size: %i, Lowest free space ava. %i",(TaskStack->pxTopOfStack - TaskStack->pxStack),(CurrentCell - TaskStack->pxStack)); }
return (0); }
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|