OpenEdv-开源电子网

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

keil软件仿真的问题·····

[复制链接]

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
发表于 2014-7-11 21:22:57 | 显示全部楼层 |阅读模式
5金钱
在KEIL仿真时:代码为
[mw_shl_code=c,true]#define Subdivision 16 #define Step_Angle 1.8 void Motor_Run(u8 Dr, u16 Angle, u8 Speed) { u16 Pulse_Num = 0; u16 PWM_time = 0; u16 t1 = 0; float t2 = 0; t1 = 6*Speed*Subdivision; t2 = Step_Angle/ t1; PWM_time = t2*1000*1000; // PWM_time = (u32)((u32)(Step_Angle*1000000)/(6*Speed*Subdivision));//每个脉冲需要多少时间(us) }[/mw_shl_code]

仿真时出现:

这是什么原因呢??????????

最佳答案

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

回复【7楼】正点原子: --------------------------------- printf出来是正确的值,那就是软件的事了····
在你没有做出成绩之前,这个世界不会在乎你的自尊。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2014-7-11 21:22:58 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
printf出来是正确的值,那就是软件的事了····
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2014-7-11 21:25:19 | 显示全部楼层
这个PWM_time是什么情况??手算的话就是等于187.5,换成u16型的就是十进制的187,为什么会出现not in scope????
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-7-11 21:51:45 | 显示全部楼层
目测是寄存器变量,无对应内存值
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2014-7-12 08:36:44 | 显示全部楼层
回复【3楼】styleno1:
---------------------------------
我用JTAG仿真也是出现这个情况,但是在实际运行中就没事····
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-7-12 18:53:25 | 显示全部楼层
PWM_time变量,你只是赋值了,并没有使用。。。。
所以可能MDK优化掉了吧。。。
你再使用一下PWM_time看看。。。
比如加一句:Pulse_Num=PWM_time;
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2014-7-12 21:04:31 | 显示全部楼层
 回复【5楼】 Admin :
---------------------------------
我在后面使用了,贴的程序只是我为了说明问题才把后面的程序给砍掉了···
[mw_shl_code=c,true]void Motor_Run(u8 Dr, u16 Angle, u8 Speed) { u16 Pulse_Num = 0; u16 PWM_time = 0; u16 t1 = 0; float t2 = 0; while(Motor_Run_Flag);//等待电机不忙 Pulse_Num = Angle * Subdivision / Step_Angle ;//计算需要发送的脉冲数 t1 = 6*Speed*Subdivision; t2 = Step_Angle/ t1; PWM_time = t2*1000*1000; // PWM_time = (u32)((u32)(Step_Angle*1000000)/(6*Speed*Subdivision));//每个脉冲需要多少时间(us) if(1 == Dr) //方向控制 { Direction = 1; } else { Direction = 0; } TIM3_PWM(PWM_time,Pulse_Num); }[/mw_shl_code]
这上面是完整的程序,仿真就会出现上述现象,但是下到板子上是很完美的 和仿真相差太大了···

在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-12 23:53:56 | 显示全部楼层
将这两个值printf出来,看看就真相大白了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-7-13 08:29:21 | 显示全部楼层
回复【6楼】亲亻尔嘴:
---------------------------------
局部变量会有not in scope现象,定义成全局变量试试。
永远保持一颗学习的心态。
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2014-7-13 08:31:48 | 显示全部楼层
回复【8楼】科科1987:
---------------------------------
这个在下到板子上,是没有问题的···  是我的原因还是KEIL的原因···
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 05:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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