OpenEdv-开源电子网

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

新手小弟,请各位大哥指导下... ...

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-2-14
在线时间
0 小时
发表于 2016-2-14 01:39:25 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 _Walnut 于 2016-2-14 02:28 编辑

如图所示: delay()函数下循环嵌套在硬件上不执行逻辑,问题出在哪里,谢谢.

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

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-2-14 02:33:52 | 显示全部楼层
本帖最后由 HER107 于 2016-2-14 02:40 编辑

[mw_shl_code=c,true]void delay(u16 x)
{
        u16    y;
      while(x--)
           {
           y=1000;
            while(y--);
           }
}
[/mw_shl_code]
语法没错,逻辑也没错???………… 你仔仔细细看清楚自己有没有错先???
i的初始值位65000,但是一个循环后有没有重装值动作????最基本的语法都没搞懂,瞎叫唤!
i=65000;这个应该包含在外循环内,写个例子给你看,
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-2-14 02:48:44 | 显示全部楼层
[mw_shl_code=c,true]void delay(u16 x)
{
      u16 y;
     while(x--)
         while(--y);
}[/mw_shl_code]
像这样,这个减号换个位置也行的,至于为什么,自己复习一下C语言去!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-2-14
在线时间
0 小时
 楼主| 发表于 2016-2-14 03:04:52 | 显示全部楼层
感谢指点,问题找到了,循环变量未重装初值,导致数值溢出进入死循环,再次感谢... ...
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-2-14 03:08:18 | 显示全部楼层
_Walnut 发表于 2016-2-14 03:04
感谢指点,问题找到了,循环变量未重装初值,导致数值溢出进入死循环,再次感谢... ...

谁说这是死循环了? 这只是延时的时间变短了而已!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-2-14
在线时间
0 小时
 楼主| 发表于 2016-2-14 03:34:03 | 显示全部楼层
HER107 发表于 2016-2-14 03:08
谁说这是死循环了? 这只是延时的时间变短了而已!

感谢你的指点,我仔细查看过了,while循环中的值只要不为0,都默认TRUE,也就是执行循环,最后一次自减完退出时再进入判断时循环变量值为-1了,也就进入无限循环状态了,不管是仿真环境还是目标板环境下都是进入死循环状态的.
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-2-14
在线时间
0 小时
 楼主| 发表于 2016-2-14 03:41:43 | 显示全部楼层
其实这样写代码应该是很不规范的,既然是条件表达式,就应该写成条件判断语句
while(i-- != 0)或while(i-- == 0),都是以前学C51时留下的诟病,以后得多规范化了,非常感谢帮忙解决问题的大哥,谢谢... ...
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-2-14 03:50:33 | 显示全部楼层
_Walnut 发表于 2016-2-14 03:34
感谢你的指点,我仔细查看过了,while循环中的值只要不为0,都默认TRUE,也就是执行循环,最后一次自减完退出 ...

无符号整型哪里来的负1??? 16位的变量 0的时候减1就变成65535了!
你先去搞明白i--和--i的区别先!!
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2016-2-14 16:19:36 | 显示全部楼层
本帖最后由 止天 于 2016-2-14 16:23 编辑

只有我一个人没看出来错在哪?

我怎么看着是缺int啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 03:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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