OpenEdv-开源电子网

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

LWIP发送adc采集的数据到电脑乱码--好像发错版块了,不知道怎么改,版主

[复制链接]

17

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2015-12-22
在线时间
128 小时
跳转到指定楼层
楼主
发表于 2016-1-12 17:29:57 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
20金钱
本帖最后由 elvin 于 2016-1-12 17:33 编辑

//dma搬运adc采集的数到内存
__IO uint16_t ADCoverVaule;DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCoverVaule;  

//开发板作为 tcpserver 发送数据
extern __IO uint16_t ADCoverVaule;
if(tcp_server_flag&(1<<7))        //如果有数据发送
                {
                        es->p=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)ADCoverVaule),PBUF_POOL);//申请内存
                        pbuf_take(es->p,(char*)ADCoverVaule,strlen((char*)ADCoverVaule));          //打包成pbuf数据结构,是不是这里的问题呢
                        tcp_server_senddata(tpcb,es);                 //
                        tcp_server_flag&=~(1<<7);                          //
                        if(es->p!=NULL)pbuf_free(es->p);         //        
                }

回复

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2015-12-22
在线时间
128 小时
2#
 楼主| 发表于 2016-1-13 09:19:13 | 显示全部楼层
zuozhongkai 发表于 2016-1-12 19:13
用sprintf把数组转成字符串或者用数组存放AD值,然后发送

//改成
                        sprintf((char*)q,"%d\r\n",ADCoverVaule);
                        es->p=pbuf_alloc(PBUF_TRANSPORT,strlen(q),PBUF_POOL);
                        pbuf_take(es->p,q,strlen(q));   

报错..error:  #167: argument of type "u32 *" is incompatible with parameter of type "const char *"
回复

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2015-12-22
在线时间
128 小时
3#
 楼主| 发表于 2016-1-13 09:26:35 | 显示全部楼层
zuozhongkai 发表于 2016-1-12 17:29
用sprintf把数组转成字符串或者用数组存放AD值,然后发送

解决了,是没给q申请内存。能发送adc采集的数值,但是速度很慢。我把tcp_server_flag最高位置1(有数据要发送)放在了dma搬运数据的中断里(搬运一次就打印到串口),tcp速度远没有串口快。ping得到的反应时间也是<1ms的
回复

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2015-12-22
在线时间
128 小时
4#
 楼主| 发表于 2016-1-13 10:47:16 | 显示全部楼层
zuozhongkai 发表于 2016-1-13 09:37
发送慢是因为例程中把发送放在了poll轮训函数中,把那个函数稍微改一下就可以直接发送,速度就快了

我参照你的一个lwip速度优化改了发送窗口和缓冲区大小,发送速度大概是1s每次,adc采集很快的。

你说的是tcp_server_poll轮询函数吧,我看逻辑感觉没有多余啊。

先判断es是不是非空,非空的话,如果有数据发送就发送数据,如果是关闭命令就关闭连接
                                    es空的话,就终止连接删除pcb控制块
回复

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2015-12-22
在线时间
128 小时
5#
 楼主| 发表于 2016-1-15 21:31:18 | 显示全部楼层
zuozhongkai 发表于 2016-1-13 09:37
发送慢是因为例程中把发送放在了poll轮训函数中,把那个函数稍微改一下就可以直接发送,速度就快了

大神可以给个优化的具体方向吗
回复

使用道具 举报

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

本版积分规则


关闭

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

正点原子公众号

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

GMT+8, 2026-1-12 04:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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