OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 249|回复: 16

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

[复制链接]

  离线 

2

主题

7

帖子

0

精华

新手上路

Rank: 1

积分
45
金钱
45
注册时间
2017-11-20
在线时间
9 小时
发表于 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
回复

使用道具 举报

  离线 

55

主题

4456

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

使用道具 举报

  离线 

13

主题

404

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

新手上路

Rank: 1

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

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

使用道具 举报

  离线 

13

主题

404

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

1

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2017-3-7
在线时间
215 小时
发表于 7 天前 | 显示全部楼层
定义成有符号数试试
回复

使用道具 举报

  离线 

17

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-2
在线时间
9 小时
发表于 7 天前 | 显示全部楼层
printf("%d\n",a);

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

使用道具 举报

  离线 

17

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-2
在线时间
9 小时
发表于 7 天前 | 显示全部楼层
我记得KEIL有个设置,         得先选中,才可使用print()
回复

使用道具 举报

  离线 

13

主题

404

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2016-4-29
在线时间
131 小时
发表于 7 天前 | 显示全部楼层
这么说吧,楼主,下面再加一个while(1)试一下
回复

使用道具 举报

  离线 

5

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2016-7-20
在线时间
94 小时
发表于 7 天前 | 显示全部楼层
打印函数需要重定向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

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-6-2
在线时间
31 小时
发表于 7 天前 | 显示全部楼层
现在执行效果是什么样的?
回复

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

新手上路

Rank: 1

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

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

使用道具 举报

  离线 

2

主题

8

帖子

0

精华

新手上路

Rank: 1

积分
30
金钱
30
注册时间
2017-12-6
在线时间
5 小时
发表于 7 天前 来自手机 | 显示全部楼层
程序后加一个while(1);
回复

使用道具 举报

  离线 

55

主题

4456

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

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

使用道具 举报

  离线 

13

主题

404

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

新手上路

Rank: 1

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

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

使用道具 举报

  离线 

4

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

keil帮你优化了
回复

使用道具 举报

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

本版积分规则




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

GMT+8, 2017-12-15 20:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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