Hi,
I'm using a MCB2368 board with both RTX and TCP Net over ethernet. I have a single tcp task that manages all my socket.
The other task is a FTP server connected to a SD memory card and communicates through mailbox and events mith the main tcp.
My chins dropped away (is it the good expression ? ) when I saw the speed : 6KB/s ....
Ok , so I removed the sd card reading and I had something like that when sending data over my socket :
sdbuf=_alloc_box(sdcardpool); //a dynamic allocated block memset(sdbuf,1,1400); // fill the block with 0x01 // Send quite filled TCP frame 20times (20*1400=28000 bytes) for (i=0;got<20;got++) { SendFtpData(sdbuf,1400); }
In SendFtpData() , I allocate the tcp buffer , send the frame, and wait for a ACK event from the main tcp task :
void SendFtpData(U8 *buf,U16 len) { TcpFrame *frame; frame=_alloc_box (mpool); os_mut_wait(mutex_getbuf,0xFFFF); frame->message=tcp_get_buf(len); os_mut_release(mutex_getbuf); memcpy(frame->message,buf,len); frame->length=len; os_mbx_send(mailbox3,&frame,0xFFFF); os_evt_wait_or(EVT_FTP_DATA_ACK,0xFFFF); _free_box(mpool,frame); }
So , with a simple memory block filled and sent 20 times I get only 6.3 KB/s ... So I can say that it's not the FAT/SD card stack that is slow.
In this case why Tcpnet is so slow ? Is it possible to manage blocks of data and not each tcp frame ?
Thanks in advance.
Don't you use the tcp_send function??? take a look at http://www.keil.com/support/man/docs/rlarm/rlarm_tcp_send.htm
First you have to initiate your socket. Make sure it's in the connected state. Then ask a location to send your data (pointer wil be returned). Then send it with the tcp_send function. You can then use the callback function to see if all was ok.
This way you should be able to send blocks of data.
Also check the tcp_max_dsize function (http://www.keil.com/support/man/docs/rlarm/rlarm_tcp_max_dsize.htm) and the settings for MEM_SIZE in Net_Config.c file (line 34)
Hope this helps