//========================================================================
  //TITLE:
  //    软开关设计漫谈_软件篇
  //AUTHOR:
  //    norains
  //DATE:
  //    Sunday 19-may-2009
  //Environment:
  //    WINDOWS CE 5.0
  //========================================================================
  
  相对于硬件来说,软开关的软件代码更为简单,只需要检测DETECT_KEY即可。该功能的实现主要是通过GPIO,而wince并没有对GPIO做上层定义,并且每款CPU的GPIO的操作方式又各自不同,所以本文无法给出一个完整可用的代码,只能用伪代码作为示例讲解。虽然是伪代码,但对于了解其流程还是有一定的意义。
  
void Power_On()
{
  ...
 
  //设置GPIO_SHDN为high
  SetGPIO_HIGH(GPIO_SHDN);
 
  ...
}

DWORD PWR_IntrThread(PVOID pParam)
{
  ....
 
  //使能中断
  EnableInterrupt();
 
  //初始化中断
  InterruptInitialize(btnSysIntr, hNotifyEvent, 0, 0)
 
  while(TRUE)
  {
    //等待中断事件
   dwRet = WaitForSingleObject(hNotifyEvent, INFINITE);
   
   if(dwRet == WAIT_OBJECT_0)
   {
     //中断处理完毕,让中断再次进入处理
    InterruptDone(btnSysIntr);
    
    //再次等待中断处理事件
    dwRet = WaitForSingleObject(hNotifyEvent, 1000);
    
    if(dwRet == WAIT_TIMEOUT)
    {
      //当其位WAIT_TIMEOUT时,意味着为长按,进入poweroff函数
     EnterPowerOff();
    }
   }
  }
 
  ....
}

void EnterPowerOff()
{
  ...

while(TRUE)
  {
   if(IsGPIOHigh(GPIO_DETECT_KEY) != FALSE)
   {
    //S1已经松开,跳出循环
    break;
   }
  }
 
  //关闭系统电源
  SetGPIO_LOW(GPIO_SHDN);

...
}

这里唯一需要注意的是EnterPowerOff函数,在这里必须要检测S1是否已经松开。如果还没有松开S1就将GPIO_SHDN置为LOW,因为S1端还有VDD33D电压输入到PWR_ON端,所以系统还是无法关闭。

转载于:https://www.cnblogs.com/wodeyitian/archive/2009/05/21/2460388.html

软开关设计漫谈_软件篇相关推荐

  1. 软开关设计漫谈_硬件篇

    //========================================================================   //TITLE:   //    软开关设计漫 ...

  2. mos 多路模拟电子开关_软开关设计 || 软开关硬件三极管、MOS管典型电路分析

    资料下载请点我(第3次更新) 赠送大家资料,复制并在后台回复以下关键词即可领取 AD19快捷键 关于今日推文 何为软开关?软开关是相对于硬开关而言. 硬开关顾名思义,电源的开断完全取决于硬件,是物理层 ...

  3. 时间管理专题_软件篇02

    本文属非商业用途,文中借鉴他人处均已注明出处,若侵犯原作权益,请联系删除,谢谢 接上一篇 时间管理专题_软件篇01 #NOTE要点:神文,从目标管理到时间统计完整流程,作者亲历 要点:此文过猛, 引用 ...

  4. 时间管理专题_软件篇03

    本文属非商业用途,文中借鉴他人处均已注明出处,若侵犯原作权益,请联系删除,谢谢 接上一篇 时间管理专题_软件篇02 标题:一年多的GTD和自我管理之路(上) 作者:褪墨・时间管理 地址:http:// ...

  5. 时间管理专题_软件篇01

    本文属非商业用途,文中借鉴他人处均已注明出处,若侵犯原作权益,请联系删除,谢谢 简介 时间管理软件筛选 #NOTE要点:较旧,2012年整理的了 ,App软件为主,偏重GTD,目标管理和统计较弱,具体 ...

  6. 家具设计软件测试自学,一个初学者如何从零开始学软装设计

    室内软装设计需要学什么?如何学? 软装设计虽然是一个新兴的行业,但也是一个有巨大市场的行业.随着软装设计的热门度不断升温,人们生活水平提高,逐渐追求"轻装修,重装饰"的品质生活,软 ...

  7. 视频教程-AssetBundle框架设计_框架篇视频课程-Unity3D

    AssetBundle框架设计_框架篇视频课程 二十多年的软件开发与教学经验IT技术布道者,资深软件工程师.具备深厚编程语言经验,在国内上市企业做项目经理.研发经理,熟悉企业大型软件运作管理过程.软件 ...

  8. 领域驱动设计_软件核心复杂性应对之道

    领域驱动设计_软件核心复杂性应对之道 转载于:https://www.cnblogs.com/MarvinGeng/archive/2013/02/21/2920968.html

  9. 极客时间_软件设计之美 笔记

    极客时间_软件设计之美 笔记 1.软件设计是什么 写代码前应该有模型设计 比如mvc结构就是一种模型 代码应该有规范, 产品内部原则 避免每个开发按自己的想法实现,有人写rest 有人写mvc 代码模 ...

最新文章

  1. 怎么关闭微信微众银行账户服务器,微信微众银行要怎么关闭,微信微众银行注销方法...
  2. Eclipse的Git插件下载项目出现 No project found
  3. win10系统调用架构分析
  4. 使用jstat报告自定义JVM指标集
  5. Element Table 可以实现哪些常见的有用的功能
  6. 非递归分治法排序 MergeSort without recursion
  7. one list to muti list
  8. 材价看板(1)- 如何建立你的第一个kanban,看看这些暴露的问题你们有没有?...
  9. Inf and NaN cannot be JSON encoded
  10. 凤凰系统基于android x x86,凤凰系统(Phoenix OS)x86版1.0 beta官方版
  11. 隐马尔可夫模型(HMM)推导详解
  12. PHP是世界上最好的语言
  13. python interactive 清空内存_Python 进程内存增长解决方案
  14. 显卡上DirectX 9.0 是什么意思
  15. 微信图文美化编辑器试试构思编辑器
  16. Java基础语法之变量、运算符、流程控制、数组和方法等基础语法
  17. codeforces 897 D Ithea Plays With Chtholly(交互)
  18. k8s集群二进制部署 1.17.3
  19. 迎着冷眼和嘲笑?前进
  20. StringBuffer之间的比较、String和StringBuffer的比较

热门文章

  1. thrift java 对象_Apache Thrift,Java:对象数据类型
  2. mysql 处理文件函数_mysql的字符串处理函数
  3. 社区发现(六)--模块度
  4. 人脸检测(九)--检测器源码分析
  5. 目标检测(一)--Objectness算法总体理解,整理及总结
  6. html插入循环图片,javascript – HTML5在带有for循环的画布上绘制图片?
  7. 上海大学c语言程序设计,上海大学2009-2010年度C语言程序设计秋季学期试卷.doc
  8. 孪生再世代表数字几_能科股份:智能制造需求旺盛,中标多领域数字孪生项目
  9. 【汇编语言】指令寻址
  10. InnoDB如何实现多版本