php enc28j60,uip0.9+ENC28J60 缓存的读写发送

当接收到TCP数据,执行如下的代码,将受到的TCP数据发回去。

void example0_app(void)

{

u16_t i;//

if(uip_connected()){

printu("example0 is connected!\r\n");

}

if(uip_newdata() || uip_rexmit()) {

printu("example0 is uip_newdata!\r\n");

for(i=0;i

printuf("%c", uip_appdata[i]);      //输出字符串

}

if(uip_appdata[0]=='C'){

uip_send(&uip_appdata[0],uip_len);

}

}

}

我在enc28j60.c的程序中,将驱动添加了如下的红色代码,想如果收到数据的第二位是‘q’就把它换成‘x’然后再发回去的,但是我发现如果我输入数据”Cbcdefg”可以正确的返回的,但是如果我输入”Cqcdefg”就没有返回了,好像卡住了似得,需要重新断开TCP连接,然后再连上,才可以工作(但,还是不可以发送第二个是’q’的数据的)不知道问题出在哪里了?

void enc28j60PacketSend(u16_t len, u8_t* packet)

{

// Set the write pointer to start of transmit buffer area

enc28j60Write(EWRPTL, TXSTART_INIT);

enc28j60Write(EWRPTH, TXSTART_INIT>>8);

// Set the TXND pointer to correspond to the packet size given

enc28j60Write(ETXNDL, (TXSTART_INIT+len));

enc28j60Write(ETXNDH, (TXSTART_INIT+len)>>8);

enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, 0x00);

if( uip_len <= TOTAL_HEADER_LENGTH ){

enc28j60WriteBuffer(len, packet);

}

else

{   len -= TOTAL_HEADER_LENGTH;

enc28j60WriteBuffer(TOTAL_HEADER_LENGTH, packet);

if(uip_appdata[1]=='q') uip_appdata[1]='x';

enc28j60WriteBuffer(len, (unsigned char *)uip_appdata);

}

enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);

}

TCP服务器,ip是192.168.1.14  端口是 8000

需要用TCP客户端连上去。开机后,小等一下再连。串口波特率9600;

客户端TCP发送 “C.......”的数据就会返回元数据,但是当客户端发送“Cq........”数据后,就没有返回了,卡住了好像·················额··············

我的代码在这里,2#,好像要登入后才可以下载··博客园里面不知道这么上传,所以就只好弄在那边了····

http://bbs.21ic.com/forum.php?mod=viewthread&tid=552046&page=1&extra=#pid3124570

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值