OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4752|回复: 6

uip中的一个疑问,求教各位大大们

[复制链接]

24

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2011-12-3
在线时间
11 小时
发表于 2013-10-15 15:01:26 | 显示全部楼层 |阅读模式
在下面这个函数中有一个循环 
//处理HTTP输入数据
static PT_THREAD(handle_input(struct httpd_state *s))
{
。。。。。。
以上省略
 while(1)
 {
  SOCK_READTO(&s->sin, ISO_nl);
  if(strncmp(s->inputbuf, http_referer, 8) == 0)
  {
   s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;    
  }
 }           
 SOCK_END(&s->sin);
}
上面程序中的while(1)不是一直循环了吗?处理一次不是就一直在循环中了吗?怎样处理其他的HTTP输入数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-15 15:51:08 | 显示全部楼层
注意:PSOCK_READTO是个宏。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2011-12-3
在线时间
11 小时
 楼主| 发表于 2013-10-15 17:07:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
恩,一下午看了很多资料,稍微有点理解了,他阻塞线程其实是函数返回
回复 支持 反对

使用道具 举报

24

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2011-12-3
在线时间
11 小时
 楼主| 发表于 2013-10-16 11:08:28 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我又发现了一个问题,void httpd_appcall(void)
{
。。。。。。。
PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1);
}
在上面的函数中,创建了s->sout的protosocket,但是只在PT_THREAD(handle_output(struct httpd_state *s))这个函数中使用了一次,如下,这样子的作用是什么???
PSOCK_CLOSE(&s->sout);
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-16 11:27:45 | 显示全部楼层
回复【4楼】401968875:
---------------------------------
这我就不太清楚了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2011-12-3
在线时间
11 小时
 楼主| 发表于 2013-10-16 13:54:23 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
那下面怎么理解呢?
struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate);//读取连接状态
其中
struct tcp_demo_appstate
{
u8_t state;
u8_t *textptr;
int textlen;
};  
typedef struct tcp_demo_appstate uip_tcp_appstate_t;
uip_tcp_appstate_t appstate;


struct httpd_state {
  unsigned char timer;
  struct psock sin, sout;
  struct pt outputpt, scriptpt;
  char inputbuf[50];
  char filename[20];
  char state;
  struct httpd_fs_file file;
  int len;
  char *scriptptr;
  int scriptlen;
  
  unsigned short count;
};

将结构体指针强行转换后,s指针的结构成员是如何初始化呢?难道是默认值?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-16 18:54:18 | 显示全部楼层
强制转换,根据结构体每个成员占的内存大小,直接将制定地址的内存区域,赋值过来。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-10 19:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表