OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3964|回复: 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);         //        
                }

最佳答案

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

用sprintf把数组转成字符串或者用数组存放AD值,然后发送
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-1-12 17:29:58 | 显示全部楼层
用sprintf把数组转成字符串或者用数组存放AD值,然后发送
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

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

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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-1-13 09:37:12 | 显示全部楼层
elvin 发表于 2016-1-13 09:26
解决了,是没给q申请内存。能发送adc采集的数值,但是速度很慢。我把tcp_server_flag最高位置1(有数据要 ...

发送慢是因为例程中把发送放在了poll轮训函数中,把那个函数稍微改一下就可以直接发送,速度就快了
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

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

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

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-8-8
在线时间
7 小时
发表于 2016-5-11 17:05:34 | 显示全部楼层
zuozhongkai 发表于 2016-1-13 09:37
发送慢是因为例程中把发送放在了poll轮训函数中,把那个函数稍微改一下就可以直接发送,速度就快了

您好,请教一下想要直接调用那个poll轮询函数,应该怎么改啊,研究了很长时间,还是没有思路,求大神指教
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-10-9
在线时间
1 小时
发表于 2016-10-9 19:00:27 | 显示全部楼层
elvin 发表于 2016-1-13 09:26
解决了,是没给q申请内存。能发送adc采集的数值,但是速度很慢。我把tcp_server_flag最高位置1(有数据要 ...

大神,能不能把代码发我一份,我想发送采集到的温度,每次使用sprintf的时候就死机了,求助1258451847@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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