3273|4

750

帖子

3

TA的资源

版主

楼主
 

【LPC54100】事件驱动之动态休眠管理(一) [复制链接]

本帖最后由 le062 于 2015-3-19 00:21 编辑

在单片机中,一般通过中断事件唤醒CPU,比如IO,AD,UART,TIMER等等。
以如下代码为例:

  1. 指令A;
  2. __wfi();
  3. 指令B;
复制代码



当__wfi();被执行后,cpu暂停,进入休眠模式。此后,cpu需等待一个唤醒事件,这儿假设使能了一个周期为1ms的定时器中断,那么当定时器中断产生后,cpu被唤醒,并进入定时器中断函数中运行,中断函数执行完毕后,再次执行指令B。



现在我们考虑下一个简单任务,一个LED_A随机闪烁:
  1. while(1)
  2. {
  3. set_led_a_high;
  4. delay_ms(random(100, 1000)); //延时随机时间,时间范围从100ms到1000ms
  5. set_led_a_low;
  6. delay_ms(random(100, 1000));
  7. }
复制代码

如果只需要让单片机跑一个LED_A任务,那是非常简单,把伪代码翻译成C语言就行,但如果需要在加个LED_B,LED_C呢?



这时候,轮询也能解决问题,在子任务中记录状态,不断判断即可:
  1. void led_a_task()
  2. {
  3. static int status = 0;
  4. switch (status)
  5. {
  6. case...........
  7. }
  8. }

  9. void main()
  10. {
  11. while(1)
  12. {
  13. led_a_task();
  14. led_b_task();
  15. led_c_task();
  16. }
  17. }
复制代码

在这段轮询代码中,cpu绝大部分时间是用来查询delay时间是否到达,而任务中的核心代码IO操作和random计算只消耗了非常少的CPU资源。



我所期望的一个解决方案是综合所有任务中的delay时间,通过排序获得最近的唤醒时间点,然后设置硬件定时器间隔,这样就能做到无无效唤醒。

在后面的帖子中,我会在LPC54102的M0核心中演示这个功能。



题外话,计划中的另外两个特性:CPU使用率监控,动态频率调整。

此帖出自NXP MCU论坛

最新回复

多多练习,也许不经意间,就能写出一大段了呢   详情 回复 发表于 2015-3-19 14:06

赞赏

1

查看全部赞赏

点赞 关注
个人签名

要666

 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
写得不错,但缺乏提炼,最好先简单说明实现的思想。
此帖出自NXP MCU论坛

点评

唉,一点点东西也写到大半夜。 其实写代码发代码是最轻松的。。。  详情 回复 发表于 2015-3-19 10:15
 
个人签名我的博客
 
 

回复

750

帖子

3

TA的资源

版主

板凳
 
zhaojun_xf 发表于 2015-3-19 09:40
写得不错,但缺乏提炼,最好先简单说明实现的思想。


唉,一点点东西也写到大半夜。
其实写代码发代码是最轻松的。。。


此帖出自NXP MCU论坛

点评

多多练习,也许不经意间,就能写出一大段了呢  详情 回复 发表于 2015-3-19 14:06
写帖子本身是很辛苦的,但能够得到别人的认同,也很值了,对自己也算一种鼓励。  详情 回复 发表于 2015-3-19 10:18
 
个人签名

要666

 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
le062 发表于 2015-3-19 10:15
唉,一点点东西也写到大半夜。
其实写代码发代码是最轻松的。。。


写帖子本身是很辛苦的,但能够得到别人的认同,也很值了,对自己也算一种鼓励。

此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

2万

帖子

74

TA的资源

管理员

5
 
le062 发表于 2015-3-19 10:15
唉,一点点东西也写到大半夜。
其实写代码发代码是最轻松的。。。
多多练习,也许不经意间,就能写出一大段了呢



此帖出自NXP MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表