OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 990|回复: 16

新人求助!为什么我的while循环无法结束!

[复制链接]

  离线 

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-11-20
在线时间
14 小时
发表于 2017-12-7 21:48:30 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wj861202 于 2017-12-7 21:57 编辑

1.png
新人求助,请大神指点,声明变量,并将其赋值成一个整数到底应该怎么做?并且可以执行自加自减操作。
我在lunix 虚拟机下写了一个while循环的代码,是可以正常工作的,为什么在STM32里面就是不行?
#include <stdio.h>
int main(void)
{
    int t=4,a=4;
    while(t--)
   {
    printf("%d\n",a);
    a--;
   }
}
执行结果正常,没问题!可是到STM32就是怎么试都不行!求教了!

最佳答案

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

楼主这程序写的。。。。都没入门。。。。理论上,你这程序跑到最后,会跑飞掉,但是不晓得是keil的特性还是单片机的特性,会从头开始执行,所以你的程序跑完,从头开始执行,t一直赋值为2
回复

使用道具 举报

  离线 

61

主题

4994

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
6293
金钱
6293
注册时间
2012-11-26
在线时间
1369 小时
发表于 2017-12-7 21:48:31 | 显示全部楼层
楼主这程序写的。。。。都没入门。。。。理论上,你这程序跑到最后,会跑飞掉,但是不晓得是keil的特性还是单片机的特性,会从头开始执行,所以你的程序跑完,从头开始执行,t一直赋值为2
回复

使用道具 举报

  离线 

18

主题

540

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1220
金钱
1220
注册时间
2016-4-29
在线时间
189 小时
发表于 2017-12-7 21:57:06 | 显示全部楼层
会一直打印 a 的值吗?
回复

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-11-20
在线时间
14 小时
 楼主| 发表于 2017-12-7 22:00:24 | 显示全部楼层
d1z1y2 发表于 2017-12-7 21:57
会一直打印 a 的值吗?

刚才忘记放照片了,下面那个打印a的值的是在虚拟机里面写的程序,是可以执行的,循环4次就结束了;但是在STM32里面写的那个代码,循环就是结束不了
回复

使用道具 举报

  离线 

18

主题

540

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1220
金钱
1220
注册时间
2016-4-29
在线时间
189 小时
发表于 2017-12-7 22:12:19 | 显示全部楼层
看一下是不是重新进main()了
回复

使用道具 举报

  离线 

1

主题

138

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1134
金钱
1134
注册时间
2017-3-7
在线时间
455 小时
发表于 2017-12-8 08:09:20 | 显示全部楼层
定义成有符号数试试
回复

使用道具 举报

  离线 

37

主题

119

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-11-2
在线时间
30 小时
发表于 2017-12-8 08:29:48 | 显示全部楼层
printf("%d\n",a);

STM32这个print()  好好研究
回复

使用道具 举报

  离线 

37

主题

119

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-11-2
在线时间
30 小时
发表于 2017-12-8 08:34:10 | 显示全部楼层
我记得KEIL有个设置,         得先选中,才可使用print()
回复

使用道具 举报

  离线 

18

主题

540

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1220
金钱
1220
注册时间
2016-4-29
在线时间
189 小时
发表于 2017-12-8 08:36:24 | 显示全部楼层
这么说吧,楼主,下面再加一个while(1)试一下
回复

使用道具 举报

  离线 

5

主题

258

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2016-7-20
在线时间
135 小时
发表于 2017-12-8 08:41:57 | 显示全部楼层
打印函数需要重定向fputc
int fputc(int ch, FILE *f)
{
        USART_SendData(USART1, (uint8_t) ch);
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        return ch;
}

在Options for target里面勾选USE MicroLIB
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

  离线 

0

主题

191

帖子

0

精华

高级会员

Rank: 4

积分
573
金钱
573
注册时间
2017-6-2
在线时间
190 小时
发表于 2017-12-8 09:17:14 | 显示全部楼层
现在执行效果是什么样的?
回复

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-11-20
在线时间
14 小时
 楼主| 发表于 2017-12-8 10:17:59 来自手机 | 显示全部楼层
jermy_z 发表于 2017-12-7 21:48
楼主这程序写的。。。。都没入门。。。。理论上,你这程序跑到最后,会跑飞掉,但是不晓得是keil的特性还是 ...

高人,那我应该怎么改,给点提示吧
回复

使用道具 举报

  离线 

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-12-6
在线时间
22 小时
发表于 2017-12-8 10:49:00 来自手机 | 显示全部楼层
程序后加一个while(1);
回复

使用道具 举报

  离线 

61

主题

4994

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
6293
金钱
6293
注册时间
2012-11-26
在线时间
1369 小时
发表于 2017-12-8 13:07:00 | 显示全部楼层
wj861202 发表于 2017-12-8 10:17
高人,那我应该怎么改,给点提示吧

13#正解,但是你琢磨这种问题是干啥,实际中根本不会这么写
道不同,不相与为谋
回复

使用道具 举报

  离线 

18

主题

540

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1220
金钱
1220
注册时间
2016-4-29
在线时间
189 小时
发表于 2017-12-8 20:20:05 | 显示全部楼层
这段程序估计就是跳出了while(1),又重新进main()函数,重新开始,反复如此
回复

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-11-20
在线时间
14 小时
 楼主| 发表于 2017-12-8 22:25:49 来自手机 | 显示全部楼层
d1z1y2 发表于 2017-12-8 20:20
这段程序估计就是跳出了while(1),又重新进main()函数,重新开始,反复如此

程序为什么会重新开始啊??
回复

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2014-2-20
在线时间
25 小时
发表于 2017-12-11 13:35:33 | 显示全部楼层
wj861202 发表于 2017-12-8 22:25
程序为什么会重新开始啊??

keil帮你优化了
回复

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-17 10:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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