OpenEdv-开源电子网

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

去掉printf会导致程序结果不对,请各位大神指点一下!!!

[复制链接]

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
发表于 2018-11-21 11:47:54 | 显示全部楼层 |阅读模式
5金钱
附一段程序:以上部分省略------


                temp3 = temp3/Test.Pole;
                printf("temp3=%d\r\n",temp3);        //此句不加返回的temp4不对
                temp4 = (u16)(1.0*temp3/Result.Period[ch1]*36000);
                if(temp4>18000)
                {
                        temp4=36000-temp4;
                }
        }
        printf("temp4=%d\r\n",temp4);
        return temp4;


}

去掉printf会导致程序结果不对,请各位大神指点一下!!!

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

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-9-17
在线时间
6 小时
发表于 2018-11-21 11:54:00 | 显示全部楼层
在那个位置换一个小延时试试效果
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 11:54:16 | 显示全部楼层
各路大神求指点呀~~~~~~~~~~~~~~~~~
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 11:55:14 | 显示全部楼层
Keating 发表于 2018-11-21 11:54
在那个位置换一个小延时试试效果

延时试过了,几十毫秒依旧不管用·····
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 11:57:17 | 显示全部楼层
@正点原子 原子哥有没有什么高见
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-11-21 13:06:26 | 显示全部楼层
有个可能,你把你的变量加 static,变成 静态变量,试试  
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 13:06:36 | 显示全部楼层
来大神呀。。。。。。。。。。。。
回复

使用道具 举报

19

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-10-12
在线时间
48 小时
发表于 2018-11-21 14:27:46 | 显示全部楼层
是不是不能使用printf,按理来说printf不会影响结果才对
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2018-7-5
在线时间
14 小时
发表于 2018-11-21 14:31:33 | 显示全部楼层
正确的打印信息和不正确的打印信息是什么?
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 15:35:44 | 显示全部楼层
yzbxc 发表于 2018-11-21 14:31
正确的打印信息和不正确的打印信息是什么?

输出结果是一个相位差,加上那一句,最后打印的相位差跟信号发生器设置一致,去掉那句就不一样了
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 15:36:16 | 显示全部楼层
haibian 发表于 2018-11-21 14:27
是不是不能使用printf,按理来说printf不会影响结果才对

我也没搞明白这是什么鬼····
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-21 16:00:51 | 显示全部楼层
这个很有可能和数据类型有关系
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复

使用道具 举报

13

主题

109

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2015-9-26
在线时间
359 小时
发表于 2018-11-21 16:21:56 | 显示全部楼层
很有可能 temp3 的数据类型 不对
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-21 16:51:04 | 显示全部楼层
xqn2012 发表于 2018-11-21 16:21
很有可能 temp3 的数据类型 不对

temp3是无符号长整型u32,存的是两个DWT->CYCCNT的差值,应该不会有问题
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-11-21 18:56:36 | 显示全部楼层
printf("temp3=%d\r\n",temp3);  这一句其实挺耗资源的, 不算转换的时间, 就已经Delay了  字串的长度x10/波特率
假定你用的是115200, 就Delay了太慨0.87ms。
你试试用Delay延时相应的时间看看吧
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-9-26
在线时间
19 小时
 楼主| 发表于 2018-11-22 08:04:14 | 显示全部楼层
edmund1234 发表于 2018-11-21 18:56
printf("temp3=%d\r\n",temp3);  这一句其实挺耗资源的, 不算转换的时间, 就已经Delay了  字串的长度x10/ ...

延时加过了,无论多长时间都不行
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-11-22 08:16:51 | 显示全部楼层
你有没有试过在U32前面加Static修饰啊??可以不可以?
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-11-22 08:19:14 | 显示全部楼层
如果不行的话那就temp3加,temp4不加。再试试
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2018-11-24 00:56:04 来自手机 | 显示全部楼层
你能仿真吗????单步调试,看看每个部分的值
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2018-11-24 09:14:59 | 显示全部楼层
本帖最后由 brucewoo 于 2018-11-24 09:16 编辑

temp3和Result.Period[ch1] 的数据类型分别是什么?
试试把
temp4 = (u16)(1.0*temp3/Result.Period[ch1]*36000);
换成
temp4 = (u16)((u32)temp3*36000/Result.Period[ch1]);
看看如何?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 05:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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