此帖出自微控制器 MCU论坛
最新回复
首先,关看门狗不需要每个循环都关,只要关一次就行了。
——上面那句是看完完整的程序之前敲上去的。留着是为了让你了解看程序的时候应该发现哪些问题。
随着程序的阅读,我发现好多语句都只需要执行一次就可以了的,然而程序却都仍在了do{}while(1);循环中。
于是程序的架构就出来了:这个do-while循环本来就只执行了一次!
程序是这么运行的:
进入main之后,先完成一系列的配置,然后打开总中断,开启ADC连续转换,进入低功耗模式LPM3。
于是程序进入了深度睡眠状态,在转换完成的时候中断唤醒,将结果赋值到results数组,由于中断服务程序里没有唤醒MCU的语句,因此完成中断服务之后会回到原来的休眠模式,也就是LPM3模式,再等待下一次中断服务唤醒。
需要中断服务结束之后回到主函数,那么只需要在中断服务里增加 LPM3_EXIT; 语句即可。程序会回到上次进入休眠前的那条语句继续执行。也就是从LPM3;的下一句开始执行。这里LPM3;下一句已经是do-while循环的花括号尾了,所以会从do语句重新开始执行。也就是我上面看起来相当不正常的“怎么需要关那么多次看门狗”~~
由于你的主函数里主循环的内容本来就不妥当,所以如果要修改的话,需要重新构建一个主循环结构,将那些配置语句放在主循环外面。
详情
回复
发表于 2015-7-12 00:41
| ||
|
||
此帖出自微控制器 MCU论坛
| ||||||||||
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现! |
||||||||||
| |
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现! |
|
此帖出自微控制器 MCU论坛
| ||
|
||
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWorld Datasheet 技术支持