我就是这样做的:我有一个程序在运行。它定期检查是否按下了“电源开关”。如果按下了,程序就进入休眠状态,等待电源开关再次按下。有时我希望它在唤醒时简单地进行重置;有时我希望它在入睡前保存系统变量和I/O状态,并在唤醒时恢复它们。现在,这里有一个使它工作的一般方法。注意,debounce_switch例程可能非常简单,比如_u._ms(1)。00)或者根据开关的性质,一些这样的事情。电源开关ISR简单地重置中断标志。我已经演示了服务例程在唤醒时禁用中断,但这在ISR中可能已经完成。现在,将我的例程与您的程序做比较。两点:除非您有一个“理想”开关(在硬件中降价),否则您必须考虑开关的恶劣现实反弹。如果要按下睡眠键,然后再按下唤醒键,则必须等待每次释放之后才能继续进行。除非您打算在唤醒时执行RESET,否则您可能希望在睡觉前保存某些变量和I/O状态,并在唤醒时恢复,以便可以转弯。不需要在睡眠中活跃的一切。这就是我想睡觉的主要原因——为了节省电力。至于,DaveFoot.:你如何得出结论,在按下开关之后,代码回到main()中的第一个指令?这对我没有好处。(我巧妙地修改了您的代码以适应我的振荡器,并且运行它,除了电源周期或手动重置之外,从来没有看到它经过闪烁的LATB3序列。)我的意思是,它没有做我想做的事,原因有很多,但是它没有重置。
我就是这样做的:我有一个程序在运行。它定期检查是否按下了“电源开关”。如果按下了,程序就进入休眠状态,等待电源开关再次按下。有时我希望它在唤醒时简单地进行重置;有时我希望它在入睡前保存系统变量和I/O状态,并在唤醒时恢复它们。现在,这里有一个使它工作的一般方法。注意,debounce_switch例程可能非常简单,比如_u._ms(1)。00)或者根据开关的性质,一些这样的事情。电源开关ISR简单地重置中断标志。我已经演示了服务例程在唤醒时禁用中断,但这在ISR中可能已经完成。现在,将我的例程与您的程序做比较。两点:除非您有一个“理想”开关(在硬件中降价),否则您必须考虑开关的恶劣现实反弹。如果要按下睡眠键,然后再按下唤醒键,则必须等待每次释放之后才能继续进行。除非您打算在唤醒时执行RESET,否则您可能希望在睡觉前保存某些变量和I/O状态,并在唤醒时恢复,以便可以转弯。不需要在睡眠中活跃的一切。这就是我想睡觉的主要原因——为了节省电力。至于,DaveFoot.:你如何得出结论,在按下开关之后,代码回到main()中的第一个指令?这对我没有好处。(我巧妙地修改了您的代码以适应我的振荡器,并且运行它,除了电源周期或手动重置之外,从来没有看到它经过闪烁的LATB3序列。)我的意思是,它没有做我想做的事,原因有很多,但是它没有重置。
举报