EC就是笔记本电脑上的一个嵌入式控制器。作为一个主板软件开发人员,一般说EC,就是EC固件程序。

想要做好EC,首先要懂代码架构。这个东西说简单就简单,说困难也困难,要有人帮忙点破,然后一切都会OK。我刚到现在的这家公司,一个同事说,他做EC,经常会有很多奇奇怪怪的问题反复出现。后来,我才了解,他没有在专业主板团队做EC的经验,又得不到EC厂商的技术支持,所以对EC代码架构不了解。我比他幸运,因为我刚做EC的时候,台湾的EC工程师JIMMY每月都会有一周的时间到大陆出差,帮客户解决问题。有一天下午,我拉着JIMMY,帮我培训了一个下午(算我半个老师了),感谢JIMMY帮我打下了一个还算不错的基础。当时陪他来我们公司的那个大陆工程师都不耐烦了,但JIMMY仍然耐心地帮我培训。听说他去了联发科,祝愿他能发展得更好。

个人认为,EC的整个代码架构,应该分为4个部分:1,初始化部分;2,运行时中断服务函数;3,运行时Dispatch中断处理函数;4,运行时任务,即在TIMER中断处理函数中加的轮询代码。

1 初始化

不管是EC,还是其它的系统软件,代码最开始的部分总是初始化。初始化各个功能模块,让其符合代码架构的需要和平台功能模块的需要。

一般来讲,初始化代码主要做如下几个事情:将中断服务函数与中断入口地址对应起来;设置好堆栈,为C环境做准备;初始化RAM为0;初始化各个模块,包括GPIO,中断控制单元,PWM,AD/DA,PS2,Timer,SMBUS等;设置看门狗;etc

2 运行时中断服务函数

代码执行过程中,会有各种硬中断及软中断来中断CPU的运行,请求CPU的控制权。CPU会实时跳入到某个中断服务函数中,执行相应的例程。中断服务函数代码段,一般应该尽量短,最好设置一下中断标志,立即跳出。这样一方面不会打断别的程序太久,另一方面也让其它中断服务函数有公平的执行机会。

3 运行时Dispatcher中断处理函数

在EC初始化完成后,如果不进入低功耗状态,那么EC就需要正常Dispatcher各个中断处理函数。中断服务函数一般不会做太多工作,大部分工作都会交给中断处理函数来执行。

Dispatcher各个中断处理函数是靠轮询的方式来实现的,这样可以保证各个中断处理函数都有可能被执行,又可以保证一定的优先级。只要把重要的中断处理函数放在前面轮询,就可以保证其优先调用。具体做法,可以查看各个厂商的EC代码,在main()函数里,都会有while(TRUE)类似的语句,在它括起来的代码段里,会有查询各个标志位,然后执行相应函数的代码。

4 添加运行时任务

为什么用EC,那是因为只要有电,EC的控制权就一直在EC固件手中。X86的CPU就不一样了,一跑进操作系统,BIOS再想做些事情就特别困难。

我们总是需要EC来检测平台的一些状态,比如电池电量,CPU温度,风扇转速,按键状态,平台功耗等。这时,我们就需要在Timer里,加入自己的代码,每隔一段时间,代码就会被执行一次。

以上就是我所提炼的EC的整个代码架构了。在我接触的EC里,华邦,ITE,ENE都是这种架构,只有瑞萨的EC代码有点例外。不过我还是觉得上述代码架构比较好。

前年,我带的一个学生要用一款单片机做温控模块。我便给他搭了一个软件架构,让他往中断处理函数里面加代码。他说我怎么做得这么快,一个晚上的时间就帮他搭好了。现在他也在做EC,肯定不再认为我CODE能力好了。因为那套温控模块的代码架构完全就是抄袭EC的思想(^_^),连脑子都不带转一下的。

EC修炼之道—代码架构相关推荐

  1. 程序员架构修炼之道:软件架构基本概念和思维

    引子 互联网发展到今天,软件系统早就不是一个万行代码加上一台服务器这样的作坊玩具.BAT的服务器规模已经达到甚至超过百万级.传统企业向互联网的靠拢,势不可挡. 优秀的软件系统架构师就像大海航船舵手,指 ...

  2. 【新书速递】解决方案架构师修炼之道

    技术领域的发展日新月异,IT专业人员为了自身的职业发展,必须与时俱进地掌握新技能.然而,在过去的十年中,这种快速变化的趋势已经在云计算领域中占据主导地位,成为"新常态".现在,几乎 ...

  3. 爆肝分享!什么样的架构师修炼之道文档,才能帮助大家修炼成为最最出色的架构师?不服就干!绝不怂!

    前言 卓越的软件架构师从何而来? 所有程序员都有成为架构师的潜力,只要掌握了架构师的思维方式和工作方法,你也能成长为架构师. 本文教你如何像架构师那样思考问题.理解需求.设计架构.评估结果.编写文档. ...

  4. 【测试人生】《测试架构师修炼之道》阅读笔记

    <测试架构师修炼之道>一书,笔者入行一年多的时候拜读过.虽然这本书主要偏向业务测试.质量管理的方向,而并非技术测试.测试开发的方向,但只要是测试行业从业者,笔者认为都值得一看. 从笔者本人 ...

  5. 曳光弹 曳光代码 原型制作 读《读程序员修炼之道》

    最近读书<程序员修炼之道:从小工到专家>,看书到第2章 注重实效的途径中,从第10小节曳光弹,到11小节 原型与便笺这两节,相对于整本书中一直都比较顺畅的理解,相对而言这一节可以说是翻译的 ...

  6. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  7. 《MySQL DBA修炼之道》——1.7 MySQL复制架构

    本节书摘来自华章出版社<MySQL DBA修炼之道>一书中的第1章,第1.7节,作者:陈晓勇,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.7 MySQL ...

  8. 【人工智能 AI 写书】《卓越架构师修炼之道》全书目录

    帮我写一本书的目录,书名<卓越架构师修炼之道>,总共10章,每章5个小节,细化到3级目录.用markdown格式. 文章目录 <卓越架构师修炼之道> 第一章 架构概述 第二章 ...

  9. 架构修炼之道 | 一个传统网关系统有几种 “死” 法

    本文节选自<架构修炼之道>,作者京东王新栋. 图 | meghan-holmes-779221-unsplash 这里说的传统,是按照网关技术演进的阶段划分的,从同步到半同步,再到全异步, ...

最新文章

  1. PHP 实现多网站共享用户SESSION 数据解决方案
  2. pyCharm编辑器激活使用
  3. 经典c语言程序编程题,c语言35道经典编程题程序
  4. 互联网1分钟 | 0121 Vlog陌生人社交APP「自言」为年轻人打造生活视频分享平台;周鸿祎:智能设备要警惕“海豚音攻击”...
  5. 【XAudio2】2.XAudio2 开始!
  6. 数组赋值给vector和list,顺便说明int和size_t的区别
  7. (pytorch-深度学习)通过时间反向传播
  8. WannaCry病毒阴魂不散:本田一家工厂受影响停产一天
  9. 随机过程(4)——马尔可夫链
  10. 扫外部二维码进入小程序,并且在小程序内获取二维码链接
  11. PyTorch 实现kmax-pooling
  12. 安卓外置SD卡linux,Android获取机身存储、内置SD卡与外置TF卡路径
  13. fcitx 添加输入法但并没有输入候选项
  14. android rfid开发实例,Android NFC读卡 高频卡 RFID
  15. 每日一佳——Structure Preserving Embedding(Blake Shaw et al. ,ICML,2009)
  16. 3.5 二维随机变量函数的分布
  17. Salome_meca2019安装教程
  18. 简单的jsp代码 简易聊天室(登录,发送信息,退出)
  19. 什么是营销漏斗模型?如何创建一个营销漏斗策略
  20. Ray Marching

热门文章

  1. c++ 实现计算立方体面积体积 并 判断两个立方体是否相等 (类和对象学习)
  2. opencv实现图片的素描化
  3. cygwin使用zsh提示fock错误
  4. 拜占庭将军问题(二)——口头协议
  5. 基于Android的校园导航电子地图软件
  6. 第 7 章 Database design E-R diagram
  7. HanLP汉语言分析框架
  8. 一个java多线程测试
  9. 关于微信公众号调起支付
  10. 乐思蜀:我们不做网络民工