OpenEdv-开源电子网

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

LWIP发送数据的问题。

[复制链接]

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4356
金钱
4356
注册时间
2017-5-30
在线时间
578 小时
发表于 2017-11-24 15:11:12 | 显示全部楼层 |阅读模式
5金钱
按照原子例程,已经实现了通讯。但是还要问题没有解决。
我做得是采集ADC信号,通过网线发出来。
领导希望发出来的是10进制的数据,比如2.5V发出来的数据就是2.5,我把采集的数据x100得到的数据取整,我用一节干电池发出来的就是91,实际上这个数据是16进制的,转换过来就是145,那么这个电压就是1.45V。float *tcp_server_sendbuf=&adcbuf;
我做了如下尝试      temp=(float)adcx*(3.3/4096);     sprintf(adcbuf,"%f",temp);  把temp的值转化成字符串,然后char *tcp_server_sendbuf=&adcbuf;
失败!!!  
完全没有数据发出了。

然后我有尝试        建一个数组adcbuf[3] 比如1.45V  把1存入adcbuf[0], 把4存入adcbuf[1],把5存入adcbuf[2]。然后u16 *tcp_server_sendbuf=adcbuf;
失败,没有数据发出。
不知道哪里出了问题,请大家路过的给我一些指点。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-11-25 00:41:05 | 显示全部楼层
char *tcp_server_sendbuf=&adcbuf;直接这样就完了?后面还有代码哦,要写入发送长度等信息
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4356
金钱
4356
注册时间
2017-5-30
在线时间
578 小时
 楼主| 发表于 2017-11-25 09:39:43 | 显示全部楼层
正点原子 发表于 2017-11-25 00:41
char *tcp_server_sendbuf=&adcbuf;直接这样就完了?后面还有代码哦,要写入发送长度等信息

这个地方我承认偷懒了。原子哥的例程是u8 *tcp_server_sendbuf=“STM32F407”;今天正好在看,这个地方了,我应该定义一个TCP服务器发送数据缓冲区,定义发送的数据的大小,长度,然后再发送。一会尝试一下。
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4356
金钱
4356
注册时间
2017-5-30
在线时间
578 小时
 楼主| 发表于 2017-11-25 15:13:46 | 显示全部楼层
adcx=Get_Adc_Average(ADC_Channel_5,20);        adcx是MCU得到的电压值
temp=(float)adcx*(3.3/4096);                                temp是计算后得到实际电压值  比如3.111
sprintf((char*)adcbuf,"%.2f",temp);                        调用函数sprintf 把float 的temp的值给adcbuf[],
memcpy(tcp_server_sendbuf,adcbuf,strlen(adcbuf));调用函数memcpy 把adcbuf[]的值拷贝给tcp_server_sendbuf   
temp有值,但是adcbuf[]没有值,然后tcp_server_sendbuf也没有值
如果我直接拷贝memcpy(tcp_server_sendbuf,&temp,4)  tcp_server_sendbuf所有的数据也是0
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4356
金钱
4356
注册时间
2017-5-30
在线时间
578 小时
 楼主| 发表于 2017-11-25 15:18:22 | 显示全部楼层
whj467467274672 发表于 2017-11-25 15:13
adcx=Get_Adc_Average(ADC_Channel_5,20);        adcx是MCU得到的电压值
temp=(float)adcx*(3.3/4096);  ...

发送函数
        if((tcp_server_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA)
                                {
                                        err = netconn_write(newconn ,tcp_server_sendbuf,strlen((char*)tcp_server_sendbuf),NETCONN_COPY);
                                memset(tcp_server_sendbuf,0,TCP_SERVER_TX_BUFSIZE);  发送缓存区清0
                                        tcp_server_flag &= ~LWIP_SEND_DATA;
                                }
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-11-26 01:14:30 | 显示全部楼层
whj467467274672 发表于 2017-11-25 15:13
adcx=Get_Adc_Average(ADC_Channel_5,20);        adcx是MCU得到的电压值
temp=(float)adcx*(3.3/4096);  ...

你直接printf出来,看看你要发送的数据对不对
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4356
金钱
4356
注册时间
2017-5-30
在线时间
578 小时
 楼主| 发表于 2017-11-26 18:12:12 | 显示全部楼层
正点原子 发表于 2017-11-26 01:14
你直接printf出来,看看你要发送的数据对不对

尝试过了,也在论坛看了其他的帖子,在UCOS里面sprintf是有问题的,有时候就会进入中断,很多坛友都说了类似问题,会莫名其妙的进入一个中断函数死循环出不来,别人说的方法都试过了,还是出不来。比如8字对齐,%lf,都不行。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-11-27 00:25:05 | 显示全部楼层
whj467467274672 发表于 2017-11-26 18:12
尝试过了,也在论坛看了其他的帖子,在UCOS里面sprintf是有问题的,有时候就会进入中断,很多坛友都说了 ...

8字节对齐,不行,那就16字节,或者32字节对齐
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4356
金钱
4356
注册时间
2017-5-30
在线时间
578 小时
 楼主| 发表于 2017-11-27 08:34:19 | 显示全部楼层
正点原子 发表于 2017-11-27 00:25
8字节对齐,不行,那就16字节,或者32字节对齐

再试试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 21:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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