sxl0679 发表于 2011-7-20 09:43:48

求教【RT-THREAD 0.3.1的网络收发问题】

下载了一个0.3.1的源码~然后把LWIP的例程加上了PDF里SOCKET TCP的CLIENT例子在STM32F103VE上跑~
//======================================================================================
建立连接后,创建两个线程,一个负责收,一个负责发,只发送的时候没问题,只接收的时候也没问题……
//======================================================================================
如果STM32一直不停的发,同时PC再给STM32发数据……线程就死掉了……请问大侠们这个应该从哪里开始去调?是发送和接收冲突了?对网络这块知识欠缺……有点无头绪……
//======================================================================================
附上我改写的APP部分

//======================================================================================
直接从KEIL里粘代码到帖子里……缩进全乱了……重新调整了一下,看着舒服多了……
//======================================================================================

const char host[]= "192.168.1.100";//连接的主机
const char send_data;//用于发送的数据

char *recv_data;//接收缓冲
int sock, bytes_received;//SOCK和接收到的数据量

static void rt_thread_entry_tx(void* parameter)
{
while(1)
{
    send(sock,send_data,512, 0);
    rt_thread_delay(1);
}
}       
static void rt_thread_entry_rx(void* parameter)
{
while(1)
{
    bytes_received = recv(sock, recv_data, 1024, 0);
    recv_data = '\0';
    rt_thread_delay(1);
}
}

//
void tcpclient(const char* url, int port)
{
struct hostent *host;
struct sockaddr_in server_addr;

/* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
host = gethostbyname(url);

/* 分配用于存放接收数据的缓冲*/
recv_data = rt_malloc(1024);
if (recv_data == RT_NULL)
{
    rt_kprintf("No memory\n");
    return;
}

/* 创建一个socket,类型是SOCKET STREAM,TCP类型*/
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
    /* 创建socket失败*/
    rt_kprintf("Socket error\n");
    /* 释放接收缓冲*/
    rt_free(recv_data);
    return;
}

/* 初始化预连接的服务端地址*/
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));

/* 连接到服务端*/
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
    /* 连接失败*/
    rt_kprintf("Connect error\n");
    return;
}
return;
}
void rt_init_thread_entry(void* parameter)
{
//==============================================
rt_thread_t tx,rx;
//==============================================

/* LwIP Initialization */
#ifdef RT_USING_LWIP
{
extern void lwip_sys_init(void);
/* register ethernetif device */
eth_system_device_init();

#ifdef STM32F10X_CL
rt_hw_stm32_eth_init();
#else
/* STM32F103 */
#if STM32_ETH_IF == 0
    rt_hw_enc28j60_init();
#elif STM32_ETH_IF == 1
    rt_hw_dm9000_init();
#endif
#endif

/* re-init device driver */
rt_device_init_all();

/* init lwip system */
lwip_sys_init();
rt_kprintf("TCP/IP initialized!\n");
}
#endif
       
//==============================================
tcpclient(host,7000);
//==============================================
tx = rt_thread_create("tx",
       rt_thread_entry_tx, RT_NULL,
       2048, 20, 50);
if (tx != RT_NULL) rt_thread_startup(tx);
               
rx = rt_thread_create("rx",
       rt_thread_entry_rx, RT_NULL,
       2048, 18, 50);       
if (rx != RT_NULL)rt_thread_startup(rx);
//==============================================
while(1)
{
    rt_thread_delay(RT_TICK_PER_SECOND);
}
}

sxl0679 发表于 2011-7-20 10:42:44

我把两个负责收发的线程延时从1增加到10(TICK是100),收发同时没问题了~发送速度5120b/s,接收速度10240b/s
看来应该是冲突了……
页: [1]
查看完整版本: 求教【RT-THREAD 0.3.1的网络收发问题】