找回密码
 立即注册
楼主: main

怎样在中断返回时,返回到主程序中的某个位置。

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-3-27 12:05:16 | 显示全部楼层
ma*** 发表于 2023-3-27 09:48
对于单片机而言,GOTO,不会导致任何错误。不会跑飞。任何语句都有跑飞的概率,至于goto不一定比其他语句 ...

虽然我用单片机超过30年,但还是能力、水平有限,看不懂你的描述,太高深。
我用C语言,基本不用goto。
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-14 09:15:06
已绑定手机

4

主题

23

回帖

272

积分

中级会员

积分
272
发表于 2023-3-27 13:41:25 | 显示全部楼层
梁*** 发表于 2023-3-27 12:05
虽然我用单片机超过30年,但还是能力、水平有限,看不懂你的描述,太高深。
我用C语言,基本不用goto。 ...

我是针对8#的回复,回复的。和主题没多大关系。
8#说: “C语言虽然可以,”goto 你想去的地方“,详细你可以百度,但是这个指令在C语言里用容易跑飞,汇编比较可靠”。
你觉得8#说的对吗?
  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2023-4-5 20:47:01 | 显示全部楼层
程序跑飞是怎么定义的?
编程逻辑引起的混乱对于单片机来说就正常干活没有跑飞,只能算程序bug.
只有寄存器数据或片内信号受到干扰,处理器没有正确执行指令行,程序跳到其他指令行运行才叫跑飞吧?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2023-4-5 20:55:20 | 显示全部楼层
中断返回后想改道运行,最好预先设置个特殊标志,进中断后根据需要修改标志状态,出中断后合适位置做特殊标志判断,就能跳转到想要的地方,
像掉电这类重要的操作,执行之前要判断下特殊标志,这样就能避免一出中断就掉电的问题
这个特殊标志也可以用闲置的低优先级中断函数做,进高优先级中断后把低优先级的中断标志软件置位,这样退出中断会立马响应低优先级中断处理想要的事情,处理完再执行掉电操作.
我觉得应该有很多办法解决这个问题.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-14 09:15:06
已绑定手机

4

主题

23

回帖

272

积分

中级会员

积分
272
发表于 2023-4-6 14:17:17 | 显示全部楼层
网*** 发表于 2023-4-5 20:55
中断返回后想改道运行,最好预先设置个特殊标志,进中断后根据需要修改标志状态,出中断后合适位置做特殊标志 ...

你这个办法不可行。在“进入掉电模式”之前打开中断,就决定了,主流程里面没有任何办法拦截。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-11-4 18:06:32 | 显示全部楼层
很简单, 程序改成这样即可

if(满足低功耗条件)
{
    //配置中断
    ...
    EA = 1;           <--必须提前允许相关的中断和总中断,否则唤醒不了了。
    ...                    <--如果这时候进入中断,而中断处理结果是:不能“马上”进入掉电模式,怎么办!!!
    ...
    NOP(4);

    EA = 0;   
    NOP(10);
    EA = 1;   
    //进入掉电模式
    PCON | = 2;  <--进入掉电模式,等待外部触发。
    NOP(4);
    ...
}

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 20:27 , Processed in 0.116077 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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