WinCE节能降耗新技巧:高效休眠唤醒

最新更新时间:2011-09-07来源: chinaaet关键字:WinCE操作系统  嵌入式开发  节能降耗 手机看文章 扫描二维码
随时随地手机看文章

        伴随着嵌入式产品的普及,电源管理开发和设计成为了嵌入式系统开发的重点和重要部分。因为嵌入式设备对能耗越来越敏感,而电源管理技术正是这些产品设计的关键所在。目前嵌入式系统的电源管理技术正由传统的基于电源管理器件和外设控制为主的静态控制方式,转到以操作系统为核心的动静态结合的综合控制模式。

  为了应对电源管理面临的挑战,在嵌入式系统开发时需要设计多种电源模式,以便在不同工作状态时有多种能耗模式可供选择。休眠和唤醒功能正是目前WINCW系统开发的研究热点之一。那么,休眠唤醒功能是什么原理呢?它能达到什么样的效果。这首先要从硬件说起,当系统进入休眠模式后,整个系统会进入低功耗休眠模式,只有当外部中断中任意一个中断被触发或者实时时钟中断被触发时,系统才会被唤醒。
  一.什么是休眠唤醒功能?
 
  (1)什么是WinCE休眠唤醒功能?
 
  在WinCE系统中支持多种电源状态:①ON状态,用户在主动使用设备。②UserIdle状态,用户与设备停止交互,但仍有可能使用设备。③SystemIdle状态,在经过一段时间的UserIdle后进入此状态,但是驱动和系统仍然活动。④Suspend状态,当驱动程序和系统进程不再与系统交互时进入此状态。⑤ColdReboot和Reboot状态,冷启动后系统电源状态。其中,按功率消耗由小到大可分为睡眠(sleep)、空闲(idle)、运行(Run)等模式。大多时间内,在运行态(Run)时设备全部正常工作,而在睡眠与空闲模式时系统则是按照特定的模式进行相应的节能。
 
  通常,嵌入式系统在大多数时间都不需要关注WinCE 设备的电源损耗,但是在某些时候要注意这些损耗。因此,最好的节能方法是使系统适时的进出休眠状态。例如,WinCE系统先检查任务负载情况,如果没有需要运行的任务,则一般进入空闲节能状态等待唤醒,在空闲一段时间后再进入深度睡眠,挂起到RAM中或者硬盘上。当WinCE 系统被挂起,为了省电系统需要关闭CPU处理器及大部分设备的供电,然后在需要唤醒时再通过定时器或中断模块唤醒。比如用户按下On/Off按钮时,或者监视用户活动的定时器超时,或者应用程序API都可以使得嵌入式系统休眠。而当用户再次按下On/Off或者有其它唤醒中断发生时,系统内核调用OEMPowerOff()函数,在系统唤醒后继续从OEMPowerOff()被挂起处执行。OEMPowerOff函数能进行CPU寄存器保存、设置及唤醒恢复等功能。系统Idle状态和前面说的UserIdle状态是不同概念,前者是CPU负荷驱动,代表系统空闲;后者是用户活动驱动,代表用户空闲。
 
  (2)休眠唤醒功能的具体内容
 
  一般来说,WINCE电源状态有六种状态,分别是S0到S5:S0实际上这就是我们平常的工作状态,所有设备全开;S1也称为POS(Power on Suspend),这时除了通过CPU时钟控制器将CPU关闭之外,其它的部件仍然正常工作;S2这时CPU处于停止运作状态,总线时钟也被关闭,但其余的设备仍然运转;S3这就是我们熟悉的STR(Suspend to RAM);S4也称为STD(Suspend to Disk),这时系统主电源关闭,但是硬盘仍然带电并可以被唤醒;S5这种状态是最干脆的,就是连电源在内的所有设备全部关闭,即关机(Shutdown)。
 
  WINCE电源管理休眠和唤醒可实现以下功能:用户可以使外设在指定时间开关,或操作系统可以根据具体需求来分配电能源,或在无人使用时可以使系统进入休眠状态,但保证一些通信设备打开。也就是说,嵌入式系统能够管理闲置的设备,关闭设备并提供恢复手段,主要支持三种节电方式:①Suspend即挂起,显示屏自动关闭,只是主机通电。这时敲任意键即可恢复原来状态。②Suspend to Ram 即挂起到内存,系统把当前信息储存在内存中,只有内存等几个关键部件通电,这时系统处在高度节电状态,按任意键后系统从内存中读取信息很快恢复到原来状态。③Suspend to Disk即挂起到硬盘,即系统将自动关机,关机前将当前数据存储在硬盘上,用户下次按开关键开机时计算机将无须启动系统,直接从硬盘读取数据,恢复原来状态。
 
  在嵌入式系统中,我们最常用到的是S3状态,即Suspend to RAM(挂起到内存)状态。顾名思义,STR就是把系统进入STR前的工作状态数据都存放到内存中去。在STR状态下,电源仍然继续为内存等最必要的设备供电,以确保数据不丢失,而其它设备均处于关闭状态,系统的耗电量极低。一旦我们按下Power按钮系统就被唤醒,马上从内存中读取数据并恢复到STR之前的工作状态。内存的读写速度极快,因此我们感到进入和离开STR状态所花费的时间不过是几秒钟而已。而S4状态即STD(挂起到硬盘)与STR的原理是完全一样的,只不过数据是保存在硬盘中。由于硬盘的读写速度比内存要慢得多,因此用起来也就没有STR那么快了,但STD模式是一种更省电的高级应用,是将当前系统状态保存到硬盘后,硬盘随即停止转动系统进入低功耗状态。当再开机时系统会跳过自检,直接从硬盘恢复原来的系统状态,而不是正常系统的默认状态,从而缩短了开机时间。
 
  二.休眠功能的具体实现过程
 
  WinCE休眠可以理解为待机,是把系统的功耗降到最低,但不是关机。让WinCE系统进入休眠的方法有很多,如在应用程序或驱动中调用SetSystemPowerState函数。一般来说,对于支持电源管理的驱动,系统会调用此驱动的XXX_PowerDown接口来关闭设备电源,之后系统会再调用OEMPowerOff()函数来实现。OEMPowerOff()函数由OEM来完成,这个函数也许会位于 Power.c或者Off.c的文件中。OEMPowerOff()是由OEM来实现的,其代码和流程也许不同,但基本按照下面的方法来完成:
 
  (1)先进行休眠前平台相关的动作
 
  这些相关的平台动作包括:为休眠模式设置合理的GPIO,合理配置实时时钟在内的唤醒源,调用BSPPowerOFF关闭休眠时不必要的设备电源。比如清屏、设置AD、挂起USB等。还包括保存芯片所有的寄存器值到一个静态数组(就是堆栈中),比如将休眠返回地址或一些不希望在休眠模式下丢失的数据进行保存。最后,是调用 CPULCDOff函数来关闭LCD背光。
 
  (2)调用 ConfigStopGPIO,设置各IO休眠后的状态
 
  这个动作是指保存当前GPIO和LCD控制器等信息在内存中,设置GPIO为低功耗状态,关闭kitl LCD等设备。同时,呼叫OALCPUPowerOff()进行挂起。OALCPUPowerOff()是一个位于Startup.s中的汇编函数。通常还包括保存通用寄存器的值到堆栈,如保存Wakeup后的地址、MMU寄存器,并进入各模式将sp和lr寄存器保存到内存RAM的某一个位置,这个位置是由config.bib指定保留的。至于为什么不象之前一样保存到堆栈呢?是因为系统唤醒后跳转到Reset开始执行,这时候堆栈还没有初始化,这也是Poweroff过程复杂的原因。
 
  (3)屏蔽所有中断,清理Cache
 
  在设置好各IO的休眠状态后,系统会在中断屏蔽寄存器中屏蔽所有中断,然后再清理Cache,做好休眠前的准备。
 
  (4)设置唤醒中断,调用 CPUPowerOff
 
  一般来说,唤醒中断可以是外部中断0,1,2,或者RTC中断。在设置好唤醒中断后,系统需要再调用OALCPUPowerOff,并设置REFRESH让SDRAM进入自刷新模式,然后等待SDRAM自刷新有效,并设置 MISCCR使 SDRAM 的信号 (SCLK0,SCLK1 and SCKE) 在 Power_OF 模式下被保护,设置CLKCON进入Power_OFF模式,最终CPU进入Poweroff状态。但因为关机最终也会调到OEMPOWEROFF函数,所以在此函数中到底去休眠还是关机就要自己根据实际情况区分一下了。而且在这个过程中,最容易出问题的部分是调用OALCPUPowerOff的过程中,这是由于CPU在休眠期间是会掉电的。
 
  三.唤醒功能的具体实现流程
 
  在休眠状态,WINCW系统中消耗的能源会大幅度降低。那么接下来,就是另一个艰巨的任务了:系统唤醒。唤醒系统基本上是个硬件过程,它和硬件紧密相关。一般是用一个外部中断来唤醒,这就要求休眠的时候这个中断源不能断电。一般来说,驱动程序里都已经做好了PowerUp和PowerDown,当然也有些驱动里有不同的处理,如使用PowerOn和PowerOff。但不论何种方式Reset,都是先执行Bootloader的代码,所以唤醒过程需要Bootloader的参与配合。详细的实现流程如下:
 
  (1)通过唤醒源唤醒系统,产生内部复位信号
 
  当我们细心观看WINCE系统由SLEEP到NORMAL的切换时,中间要经过一个 RESET的过程,这个过程称之为 Power On Reset。也就是说,当系统被外部中断唤醒时,相当于发生了一次Power Reset的过程。那么唤醒系统,就类似于给系统做了一个硬件复位,并会在GSTATUS2中保存一个数值来表明Reset的原因。而且,Power On Reset后,在之前Sleep过程中保存下来的RAM里的系统数据是不会丢失的。我们要做的唤醒系统,就是把这些数值恢复到它原来的地址里去。
 
  (2)测试是否是Power_OFF模式唤醒
 
  当WINCE系统唤醒之后,它运行的第一段程序是什么呢?这点很重要,因为唤醒=Power Reset,所以Reset CPU之后,运行第一段程序自然就是Bootloader了。现在我们再看看Bootloader是怎么处理的,如果是Reset复位就会直接跳转到0地址,也就是ResetHandler去执行。事实上,无论是HardReset还是PowerReset这个部分都要执行,主要是做初始化CPU时钟的工作。这是因为Power off模式和其它睡眠模式不同,其它的睡眠模式唤醒后会从睡眠处继续运行,而Power off模式唤醒后是从Reset处执行。
 
  接下来,系统会通过读取 GSTATUS2 寄存器里的数值,来判断Reset的原因。如果这个值是0x2,那么就是唤醒引起的PowerReset,然后会继续向下执行唤醒的恢复操作。例如,先是恢复CPU的时钟,开启RAM的自刷新,再跳转到 RAM中的一个地址去执行Bootloader,然后把NandFlash里的数据装载完毕,也就是说WINCE的操作系统被唤醒了。如果判断GSTATUS2里的数值是0x4,则说明发生了看门狗Reset,那么就要执行看门狗Reset的恢复过程。如果二者都不是的话,那么就认为是发生了Hard Reset,就要按照正常的步骤去加载Wince系统。
 
  (3)恢复SDRAM控制器信息,打开相关设备电源
 
  系统唤醒的最后一个步骤,是系统会设置MISCCR,释放SDRAM信号保护,然后等待直到SDRAM自刷新释放。并读取GSTATUS值,利用它们回复到睡眠前的程序位置。最后是恢复保存在内存中的GPIO和LCD控制器等信息,并调用BSPPowerOn打开相关设备电源,然后返回。
关键字:WinCE操作系统  嵌入式开发  节能降耗 编辑:探路者 引用地址:WinCE节能降耗新技巧:高效休眠唤醒

上一篇:带PFC的数控可调光电子照明镇流器
下一篇:适用于适配器的反激同步整流控制电路

推荐阅读最新更新时间:2023-10-18 15:39

中国嵌入式开发从业人员调查报告
随着移动互联网、物联网、云计算等热门技术的逐步应用和日益普及,这些以实现智能化为核心目标的典型技术,已经成为整个信息产业毋庸置疑的主旋律。无论从政府大力扶持角度来看,还是从产业变革的主流方向来说,这股潮流早已势不可挡。 事实上,随着产业的变革和发展,IT行业也已经被重新定义,从Information Technology(信息技术)领域发展为Intelligent Technology(智能技术)领域。而嵌入式系统正是这些热门产业应用技术中最核心、最关键的部分,是推动这些产业快速发展的中坚力量。作为整个智能化电子行业的最核心技术领域,嵌入式行业更是凭借其“应用领域广、人才需求大、就业薪资高、行业前景好”等众多优势成为时下最
[嵌入式]
中国<font color='red'>嵌入式开发</font>从业人员调查报告
您是否真的适合做嵌入式开发(三)
6、处理器芯片的选择      处理器芯片的选择为本年度新增的调研项目,据调查统计数据的结果显示,TI(德州仪器)和SAMSUNG(三星),成为最受开发者欢迎的嵌入式处理器芯片提供商,占据了接近一半(47%)的市场份额,其他知名厂家处理器芯片所占市场份额分布为:Qualcomm(高通)10%、Intel(英特尔)8%、NXP(恩智浦)6%、Atmel(爱特梅尔)5%、Nvidia(英伟达)5%、Freescale(飞思卡尔)4%、Renesas(瑞萨)3%,除以上厂家之外的其他处理器则占总体市场份额的12%。   7、软件开发语言的使用      来自2012-2013年度华清远见的调查统计数据显示,在嵌入式产
[模拟电子]
iPhone推进嵌入式开发走向标准化
  据一组研究消费者行为的工程师称:嵌入式系统开发走向标准化的趋势,几乎是必然加速的。其中许多原因都包含在过去一年最具影响力的消费设备——苹果iPhone中。   Smart Design交互设计主管Jason Smart将iPhone描述为“以用户为中心设计”的缩影,这正呼应了Tech Online总编Patrick Mannion的话,他称iPhone是“软件设计和消费者能动性的壮举。”   领导着着反向工程公司Portelligent的David Carey将iPhone诗意的赞为“玻璃驾驶舱”,其最重要性质是“几乎与键盘完全脱离”,引领用户使用触摸屏幕。iPhone的成功导致工程师重新考虑消费者使用电子设备的方
[手机便携]
初学者如何玩转ARM,举一反三
我是稀里糊涂的走上了嵌入式开发的道路,回想起来,多亏了身边的几位朋友,是在与他们的闲侃中慢慢的走上了这条道路:从最早的电路设计,PCB打板,电路调试,模拟仿真,单片机开发到后来的ARM开发,回想起来,心里也是诚惶诚恐,如履薄冰。 我开始做电子是用的AVR单片机,从I/O、按键…到内存、外设玩了一通。工作之后,才开始玩ARM。在项目中逐渐对ARM开发有了一些感悟。 学习ARM有两个目的,看你是那种:1、长见识,顺便玩玩;2、工作需要,从事ARM开发。这就要分开对待了。 如果是长见识,随便玩玩,为日后的工作做准备,那么就应该挑选市场上很成熟的ARM7、ARM9等资料比较多,玩的人比较多,出现问题容易解决;如果是工作需要,就
[单片机]
初学者如何玩转ARM,举一反三
LabView嵌入式开发模块技术要点
无论使用什么设计语言,不良的编程技术都会给一个应用的性能带来负面影响,对一个嵌入式应用尤其如此。尽管对于绝大部分应用来说,高效率的编程技术是重要的,但对于嵌入式应用所工作的资源极度缺乏的环境,则要求对性能和存储器管理给予特别的关注。 本文的讨论将围绕着新的LabView嵌入式开发模块进行,这种新工具为嵌入式应用开发人员提供了图形化系统设计手段。该工具允许用户直观地设计算法并进行交互式调试。下面是一些有助于编程师更有效使用LabView开发嵌入式应用的技巧。这些技巧中的许多也适用于其它高级工具。 动态分配存储器技术 动态存储器分配是一项编程师应尽可能避免的复杂操作。例如,如果动态分配出现在将数据存储到数组内的一个循环内,那么它尤其有
[测试测量]
为何嵌入式开发也需要DevOps?
对于碎片化的嵌入式和物联网产品开发而言,没有什么是比DevOps更能显著提升效率的方法了。作为新一代持续集成/持续开发(CI/CD)的方法论,DevOps正被快速从企业软件引入嵌入式世界中。 为什么企业对于DevOps的接受度越来越高?根本原因就是DevOps可以降低成本并提升效率。 根据Google DORA( DevOps、Research与Assessment)团队最新的《DevOps现状》报告,在DevOps方面成效不佳的团队很少能够在6个月内将软件投入生产运营。即便他们做到了,也会有16%-30%的失败率,而且他们很可能需要长达六个月的前导时间来让代码投入生产运营。就算变更不那么频繁,但某些事情发生变更带来的风险
[嵌入式]
助力AI发展,威盛发布新一代嵌入式开发模块
21世纪以来,计算机市场从PC时代发展至移动时代,并逐渐向AI(人工智能)时代转变。智能机器人作为人工智能的重要分支,它的出现在科学研究、工业生产、日常服务等众多应用领域都有着极为重要的意义,也是能够综合反映一个国家在制造业和人工智能等方面水平的指标。 一般的智能机器人根据其智能程度不同,分为以下三种类型: 传感型 机器人的本体上没有智能单元,只有感应和执行机构,它具有利用传感信息(包括视觉、听觉、触觉、力觉和红外、超声及激光等)进行传感信息处理、实现控制与操作的能力。 交互型 机器人通过计算机系统与操作员或程序员进行人机对话,实现对机器人的控制与操作。虽然具
[物联网]
助力AI发展,威盛发布新一代<font color='red'>嵌入式开发</font>模块
IAR首次举行EWARM嵌入式开发工具培训班
    2009 年 4 月 11 号到 12 号, IAR Systems 携手中国电子学会嵌入式系统专委会、华中科技大学、北京博创兴业科技有限公司,将于武汉华中科技大学工程实训中心举行为期 2 天的 EWARM 嵌入式开发工具培训班,这也是 IAR 首次在中国教育行业内举行的 EWARM 培训班。       本次培训使用北京博创科技嵌入式工程师认证考试 “ 三剑客 ” 作为教学平台,结合中国电子学会工程师上机实践环节认证考试大纲,通过 “ 基于 EWARM 开发环境下的触摸屏、液晶屏、 LED 驱动及 μ COS-II 操作系统移植 ” 为案例,对学员进行理论与实践课程的培训;此外,学员还能掌握 EWA
[嵌入式]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved