对于单片机而言,GOTO,不会导致任何错误。不会跑飞。任何语句都有跑飞的概率,至于goto不一定比其他语句 ...
虽然我用单片机超过30年,但还是能力、水平有限,看不懂你的描述,太高深。
我用C语言,基本不用goto。 梁工 发表于 2023-3-27 12:05
虽然我用单片机超过30年,但还是能力、水平有限,看不懂你的描述,太高深。
我用C语言,基本不用goto。 ...
我是针对8#的回复,回复的。和主题没多大关系。
8#说: “C语言虽然可以,”goto 你想去的地方“,详细你可以百度,但是这个指令在C语言里用容易跑飞,汇编比较可靠”。
你觉得8#说的对吗? 程序跑飞是怎么定义的?
编程逻辑引起的混乱对于单片机来说就正常干活没有跑飞,只能算程序bug.
只有寄存器数据或片内信号受到干扰,处理器没有正确执行指令行,程序跳到其他指令行运行才叫跑飞吧? 中断返回后想改道运行,最好预先设置个特殊标志,进中断后根据需要修改标志状态,出中断后合适位置做特殊标志判断,就能跳转到想要的地方,
像掉电这类重要的操作,执行之前要判断下特殊标志,这样就能避免一出中断就掉电的问题
这个特殊标志也可以用闲置的低优先级中断函数做,进高优先级中断后把低优先级的中断标志软件置位,这样退出中断会立马响应低优先级中断处理想要的事情,处理完再执行掉电操作.
我觉得应该有很多办法解决这个问题. 网老四 发表于 2023-4-5 20:55
中断返回后想改道运行,最好预先设置个特殊标志,进中断后根据需要修改标志状态,出中断后合适位置做特殊标志 ...
你这个办法不可行。在“进入掉电模式”之前打开中断,就决定了,主流程里面没有任何办法拦截。 很简单, 程序改成这样即可
if(满足低功耗条件)
{
//配置中断
...
EA = 1; <--必须提前允许相关的中断和总中断,否则唤醒不了了。
... <--如果这时候进入中断,而中断处理结果是:不能“马上”进入掉电模式,怎么办!!!
...
NOP(4);
EA = 0;
NOP(10);
EA = 1;
//进入掉电模式
PCON | = 2;<--进入掉电模式,等待外部触发。
NOP(4);
...
}
页:
1
[2]