OpenEdv-开源电子网

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

stm32串口发送数据问题测不出长度

[复制链接]

349

主题

522

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1630
金钱
1630
注册时间
2014-7-11
在线时间
286 小时
发表于 2016-11-10 10:51:51 | 显示全部楼层 |阅读模式
1金钱
最近做串口发送数据,测不出数据长度,请问是怎么回事,请大侠指教char ceshi[]={0x02,0x30,0x30,0x40,0x32,0x35,0x30,0x30,0x52,0x30,0x01};

        void Uart3_SendStr5(char *a)//--------------------2016-11-8 ok
{
        u8 i,j;




        len1=sizeof(a)/sizeof(a[1]);
       

                for(j=0;j<len1;j++) //-----------------2016-11-8
                {
                        Uart3_SendChar(*(a + j));
                }


        }

调用
Uart3_SendStr5(ceshi);

len1=sizeof(a)/sizeof(a[1]);
这里测不出长度
本来数组长度为11,就是0B,可测出来是04



程序截图.png
程序截图.png

最佳答案

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

这个是很基础的C语言问题~你的sizeof(a)结果是4,因为a是指针变量,指针变量存储4个字节,你的sizeof(a[1])结果是1,因为是char类型的变量,结果当然是4~~PS:我们一般设计数据发送接口都会含有两个重要参数,一个数据指针,一个是长度,不会用sizeof来获取长度~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-10 10:51:52 | 显示全部楼层
本帖最后由 小陀螺爱炒蛋 于 2016-11-10 11:11 编辑

这个是很基础的C语言问题~你的sizeof(a)结果是4,因为a是指针变量,指针变量存储4个字节,你的sizeof(a[1])结果是1,因为是char类型的变量,结果当然是4~~PS:我们一般设计数据发送接口都会含有两个重要参数,一个数据指针,一个是长度,不会用sizeof来获取长度~

回复

使用道具 举报

349

主题

522

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1630
金钱
1630
注册时间
2014-7-11
在线时间
286 小时
 楼主| 发表于 2016-11-10 15:48:41 | 显示全部楼层
那怎么测长度
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-11-10 16:27:40 | 显示全部楼层
楼主  你在函数调用过程中将数组名赋值给了参数,而参数是一个指针,正确的应该void Uart3_SendStr5(char a[])
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-10 20:49:19 | 显示全部楼层
指针,长度是一对的。CPU是不知道指针后面的数据长度到底有多少。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 06:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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