一起學習CC3200系列教程之TCP 速度 測試
阿湯哥
序:
能力有限,難免有錯,有問題請聯繫我,
QQ1519256298 [email protected]
Pdf下載http://pan.baidu.com/s/1hqiWB56
關鍵字:TCP netio
我們應該都比較想知道CC3200的速度有快,特地花了一晚上的時間寫這個測試。
測試環境:CC3200作爲STA連接家裏的網絡,自己的電腦也連上家裏的網絡,使用的測試方法是netio,我自己模仿了netio編寫了代碼。我的電腦也是用無線連網絡的,所以速度可能會慢點,因爲我的電腦不能發現CC3200的ap,所以想直接連好像沒辦法,如果你能直接連,並測試了,請發測試圖片給我,謝謝。因爲wifi可能有涉及到某些設置(窗體啊,或者是其他的參數,我也不太懂),因此測試僅供參考,如果你對改進wifi速度有啥建議,請教我下。謝謝。
測試工具連接http://download.csdn.net/detail/hytgab/8810159
測試結果:
左邊的是電腦的,右邊的是cc3200打印的,因爲我在cc3200的定時器是秒爲單位的,不能精確到毫秒,圖簡單,因此兩邊的速度可能有些差異。
參考代碼:沒有實現udp的測試
typedef struct
{
unsigned long cmd;
unsigned long data;
}CONTROL;
#define CMD_QUIT 0
#define CMD_C2S 1
#define CMD_S2C 2
#define CMD_RES 3
#define CTLSIZE sizeof(CONTROL)
char G_Buf[1024 * 32];
int G_TimerOver = 0;
int G_TimerCounter = 0;
int G_TimerMs = 0;
void TimerRefIntHandler(void)
{
Timer_IF_InterruptClear(TIMERA1_BASE);
G_TimerMs++;
if (G_TimerMs == G_TimerCounter) {
G_TimerOver = 1;
}
}
void vTimerInit(int iSecond) {
G_TimerOver = 0;
G_TimerCounter = iSecond;
G_TimerMs = 0;
Timer_IF_Init(PRCM_TIMERA1, TIMERA1_BASE, TIMER_CFG_PERIODIC, TIMER_A, 0);
Timer_IF_IntSetup(TIMERA1_BASE, TIMER_A, TimerRefIntHandler);
Timer_IF_Start(TIMERA1_BASE, TIMER_A, 1000);
}
void vTimerStop(void) {
Timer_IF_Stop(TIMERA1_BASE, TIMER_A);
}
void vNetioTcp(void *pvParameters) {
SlSockAddrIn_t xServer,xClient;
int iServer,iClient,iRetVal,iRc,iRcvSize,iSendSize;
unsigned long ulData;
SlFdSet_t xFds;
SlSocklen_t xAddrLen;
struct SlTimeval_t tv;
SlSockWinsize_t size;
CONTROL ctl;
tv.tv_sec = 3600;
tv.tv_usec = 0;
WlanInit();
iServer = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
if( iServer < 0 ){
//出錯處理:略
UART_PRINT("\r\n sl_Socket \r\n");
}
//設置ip及端口信息
xServer.sin_family = SL_AF_INET;
xServer.sin_port = sl_Htons((unsigned short)0x494F);
xServer.sin_addr.s_addr = SL_INADDR_ANY;
iRetVal = sl_Bind(iServer,(SlSockAddr_t *) &xServer,sizeof(xServer));
if (iRetVal < 0 ) {
//出錯處理:略
UART_PRINT("\r\n sl_Bind \r\n");
}
//創建監聽,listen隊列中等待的連接數爲2
iRetVal = sl_Listen(iServer,2);
if (iRetVal < 0 ) {
//出錯處理:略
UART_PRINT("\r\n sl_Listen \r\n");
}
while(1) {
SL_FD_ZERO(&xFds); //清空
//初始化監聽集合,
SL_FD_SET(iServer,&xFds);
iRc = sl_Select(iServer + 1,&xFds,0,0,&tv);
if ((iRc == 0) || (SL_FD_ISSET(iServer,&xFds) == 0)) {
continue;
}
xAddrLen = sizeof(xClient);
//進行接受
iClient = sl_Accept(iServer,(struct SlSockAddr_t *)&xClient,&xAddrLen);
if (iClient < 0) {
UART_PRINT("\r\n sl_Accept \r\n");
}
size.Winsize =1024 * 8; // bytes
sl_SetSockOpt(iClient,SL_SOL_SOCKET,SL_SO_RCVBUF, (_u8 *)&size, sizeof(size));
while(1) {
iRetVal = sl_Recv(iClient,(void *)&ctl,CTLSIZE,0);
if (iRetVal < 0) {
UART_PRINT("\r\n sl_Recv \r\n");
}
ctl.cmd = sl_Htonl(ctl.cmd);
ctl.data = sl_Htonl(ctl.data);
if (ctl.cmd == CMD_C2S) {
ulData = 0;
vTimerInit(100);
do{
for (iRcvSize = 0;iRcvSize < ctl.data;) {
iRetVal = sl_Recv(iClient,(void *)(G_Buf+iRcvSize),ctl.data - iRcvSize,0);
if (iRetVal < 0) {
UART_PRINT("\r\n sl_Recv \r\n");
} else {
iRcvSize += iRetVal;
}
}
ulData += ctl.data;
}while(G_Buf[0] == 0 && iRetVal > 0);
vTimerStop();
UART_PRINT("Packet size %dk bytes:%d KBytes/s Rx,",ctl.data/1024,ulData/(1024*G_TimerMs));
} else if (ctl.cmd == CMD_S2C) {
vTimerInit(6);
G_Buf[0] = 0;
ulData = 0;
while(!G_TimerOver) {
for (iSendSize = 0; iSendSize < ctl.data;) {
iRetVal = sl_Send(iClient,(void *)&G_Buf,ctl.data - iSendSize,0);
if (iRetVal < 0) {
UART_PRINT("\r\n sl_Send \r\n");
} else {
iSendSize += iRetVal;
}
}
ulData += ctl.data;
}
G_Buf[0] = 1;
sl_Send(iClient,(void *)&G_Buf,ctl.data,0);
vTimerStop();
UART_PRINT(" %d KBytes/s Tx.\r\n",ulData/(1024*G_TimerMs));
} else {
break;
}
}
sl_Close(iClient);
}
}