OpenEdv-开源电子网

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

在while循环中怎么设置按下按键后跳出循环?

[复制链接]

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
发表于 2016-8-24 10:35:35 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 沉寂之森 于 2016-8-24 10:56 编辑

在main函数中有个while的死循环,按键后进入外部中断,中断执行完后还是会进入while,怎么跳出该循环

最佳答案

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

uint8_t flag = 0xff; void main(void) { ... while(flag) { .... } } 中断函数: void xxIRQHandler(void) { .... flag = 0; ... }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-24 10:35:36 | 显示全部楼层
uint8_t flag = 0xff;
void main(void)
{
  ...
  while(flag)
  {
     ....
  }
}
中断函数:
void xxIRQHandler(void)
{
   ....
   flag = 0;    ...
}

回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-8-24 11:29:57 | 显示全部楼层
2楼正解
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 11:56:28 | 显示全部楼层
Da Wen 发表于 2016-8-24 11:02
uint8_t flag = 0xff;
void main(void)
{

这样要while执行完一次才能判断结束,有没有办法直接跳出循环?
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-8-24 12:25:49 | 显示全部楼层
沉寂之森 发表于 2016-8-24 11:56
这样要while执行完一次才能判断结束,有没有办法直接跳出循环?

没明白你什么意思,2楼是正解
回复

使用道具 举报

2

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
410
金钱
410
注册时间
2016-5-6
在线时间
110 小时
发表于 2016-8-24 12:53:43 | 显示全部楼层
這樣是不錯的方式了
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 13:06:13 | 显示全部楼层
本帖最后由 沉寂之森 于 2016-8-24 13:11 编辑

比如
while(flag)
{
step1;
step2;
step3;
}
在执行step2时进入中断,将flag改变,中断结束后是执行step3,然后才能结束循环,我想要中断结束直接跳出循环,不执行step3
在每一个step前都进行判断能实现,但是太麻烦,各位大神有没有更好的方法?
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-8-24 13:13:14 | 显示全部楼层

本身就没有step3,2楼正解,您自己弄清楚进外部中断之前在执行哪句话先。
自在随心
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-24 13:42:46 | 显示全部楼层
沉寂之森 发表于 2016-8-24 11:56
这样要while执行完一次才能判断结束,有没有办法直接跳出循环?

那就清除完中断标志位之后用goto了
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 13:45:18 | 显示全部楼层
yuzeyuan1 发表于 2016-8-24 13:13
本身就没有step3,2楼正解,您自己弄清楚进外部中断之前在执行哪句话先。

您好,是我没说清楚,我在中断中先等step2执行结束再进行其他操作,中断结束后会执行step3.
我想直接结束,不执行step3
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 13:46:49 | 显示全部楼层
本帖最后由 沉寂之森 于 2016-8-24 13:50 编辑
Da Wen 发表于 2016-8-24 13:42
那就清除完中断标志位之后用goto了

我试过,好像没法跨文件跳转,我写完提示没定义
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-8-24 13:51:09 | 显示全部楼层
本帖最后由 yuzeyuan1 于 2016-8-24 13:52 编辑
沉寂之森 发表于 2016-8-24 13:45
您好,是我没说清楚,我在中断中先等step2执行结束再进行其他操作,中断结束后会执行step3.
我想直接结 ...

step2后,step3前,加个if(flag){break;}呗。没有见过直接退另一个函数的情况。
自在随心
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 13:57:22 | 显示全部楼层
yuzeyuan1 发表于 2016-8-24 13:51
step2后,step3前,加个if(flag){break;}呗。没有见过直接退另一个函数的情况。

我有几十个step,用按键来进行中断跳转,不确定会在哪里结束,在每个步骤前加太麻烦了,有什么跳转的方法吗?
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-24 14:28:12 | 显示全部楼层
沉寂之森 发表于 2016-8-24 13:57
我有几十个step,用按键来进行中断跳转,不确定会在哪里结束,在每个步骤前加太麻烦了,有什么跳转的方法 ...

那就从汇编的角度出发吧,执行完中断后价格判断然后调到while循环后面的程序的地址
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 15:34:36 | 显示全部楼层
Da Wen 发表于 2016-8-24 14:28
那就从汇编的角度出发吧,执行完中断后价格判断然后调到while循环后面的程序的地址

请问汇编该怎么写?
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-24 15:53:19 | 显示全部楼层
沉寂之森 发表于 2016-8-24 15:34
请问汇编该怎么写?

这个我不懂
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-8-24 15:59:20 | 显示全部楼层
沉寂之森 发表于 2016-8-24 13:57
我有几十个step,用按键来进行中断跳转,不确定会在哪里结束,在每个步骤前加太麻烦了,有什么跳转的方法 ...

那。。你这代码逻辑有问题,考虑换个思路吧
自在随心
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-7-18
在线时间
17 小时
 楼主| 发表于 2016-8-24 16:06:32 | 显示全部楼层
谢谢你们,我用指针指示运行步骤,在中断中将指针跳到程序最后,在进行判断,勉强能用了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 06:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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