OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4681|回复: 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
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6769

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 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里面写的那个代码,循环就是结束不了
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

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

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

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 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

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 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

主题

29

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

70

主题

6769

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

13#正解,但是你琢磨这种问题是干啥,实际中根本不会这么写
学无止境
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 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

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

keil帮你优化了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-24 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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