OpenEdv-开源电子网

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

问2个关于STM32F4的LWIP开发手册的问题

[复制链接]

17

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-10-14
在线时间
0 小时
发表于 2015-5-11 15:07:40 | 显示全部楼层 |阅读模式
5金钱
由于手册没有F4的开发板,只能开手册研究研究,有些地方不懂忘大神指导小弟。
1.tcp_client_poll和tcp_server_poll都是tcp_poll的回调函数,tcp_poll最快1秒2次,也就是500ms可以发一次数据如何才能更快的发送数据呢?
2.err_t tcp_server_sent(void *arg, struct tcp_pcb *tpcb, u16_t len)
{
struct tcp_server_struct *es;
LWIP_UNUSED_ARG(len); 
es = (struct tcp_server_struct *) arg;
if(es->p)tcp_server_senddata(tpcb,es);
return ERR_OK;
}  
tcp_server_sent是接收到ack后的回调函数,探索者的代码是不是一按发送按键,就每割250ms就发送一次数据,不停的发,是这样吗?

本人小白没有开发板只能请教了,希望有大神能指导下

最佳答案

查看完整内容[请看2#楼]

1、关于数据发送我们为了方便放到了poll中,你可以放到其他地方中,在带系统的情况下你可以完全做一个任务来发送,没系统的话就做个定时器定时发送。 2、不是的!按下按键是将指定的字符串发送出去,并不是一直不停的发送!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-5-11 15:07:41 | 显示全部楼层
1、关于数据发送我们为了方便放到了poll中,你可以放到其他地方中,在带系统的情况下你可以完全做一个任务来发送,没系统的话就做个定时器定时发送。
2、不是的!按下按键是将指定的字符串发送出去,并不是一直不停的发送!
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-10-14
在线时间
0 小时
 楼主| 发表于 2015-5-11 16:26:51 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
感谢大神的回复。
1.err_t tcp_server_poll(void *arg, struct tcp_pcb *tpcb)回调函数中发数据的时候用到了arg,tpcb2个参数,如果我用定时器中断发数据是没有这2个参数的,请问这个怎么解决呢?
2.tcp_server_sent(void *arg, struct tcp_pcb *tpcb, u16_t len) 这里面不是用到了tcp_server_senddata(tpcb,es)函数吗,怎么会不发数据出去呢?
回复

使用道具 举报

17

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-10-14
在线时间
0 小时
 楼主| 发表于 2015-5-11 17:09:59 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
第二句话是因为没有给es->p没有开辟内存空间的原因吗
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-5-11 21:06:17 | 显示全部楼层
1、做个全局变量不就行了
2、有一个变量做发送数据的标记的,假如为flag,当flag为1就说明有数据要发送,发送完成以后flag清零,那么只有当flag为1的时候说明有数据要发送,那么就会发送出去,按键就是给flag置1,表示有数据发送!
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-10-14
在线时间
0 小时
 楼主| 发表于 2015-5-11 21:38:16 | 显示全部楼层
回复【5楼】zuozhongkai:
---------------------------------
谢谢你的讲解
1.你的意思是说做一个全局变量来在tcp_server_poll(void *arg, struct tcp_pcb *tpcb)中保存arg和tpcb的值,再用到定时器中吗?更新一次这2个全局变量不还是0.5s吗?没从根本上解决呀
2.你说的这个我明白, 标志位置1后在轮训中调用了tcp_server_senddata(tpcb,es)发送数据,而应答回调函数也调用了这个函数 tcp_server_senddata(tpcb,es);怎么就没法送出去数据呢?

这是应答回调函数
err_t tcp_server_sent(void *arg, struct tcp_pcb *tpcb, u16_t len)
{
struct tcp_server_struct *es;
LWIP_UNUSED_ARG(len); 
es = (struct tcp_server_struct *) arg;
if(es->p)tcp_server_senddata(tpcb,es);
return ERR_OK;

麻烦再解答下 谢谢了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 19:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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