马上注册(开思网用户可以直接登录),结交更多创客好友,享用更多功能,让你轻松玩转创客社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我们非常热衷于新兴的 智能硬件,每当有新产品问世时,都想尝尝鲜,也想要设计自己的产品。今天我们以智能手机为例,对整个系统的结构做一下简单的分析。
我们来想像一下,当你点开一个你爱玩的游戏,或者打开微信准备找妹子聊天的时候,最顶层的应用程序开始运行,它运行于andriod或者ios系统之上,操作系统调用驱动控制底层硬件,完成软件对硬件资源的控制,从而使游戏画面出现(LCD屏)、声音播放(扩音器),以及你编辑好的信息发送出去(SIM卡)。这个过程大家基本都能想到,接下来我们一起探讨具体流程,由于本人水平有限,故如有不准确之处请大家多多指教。在此感谢cjc做我的技术顾问。
从应用程序说起,以最流行的安卓系统为例来进行分析吧。安卓应用的开发语言是Java,Java运行于虚拟机之上,Java的源程序通过Java编译器,编译成与平台无关的“字节码程序”,字节码再由JVM(Java虚拟机)解释执行。由于Java的执行特性,决定了它的执行效率比不上c/c++,但是在做应用层开发上有优势。
操作系统,也可以看成是一个超级应用程序,它与普通应用程序之间的区别在于它是联系普通应用程序与底层硬件的桥梁,同时管理应用程序之间的沟通和各硬件资源的调用。操作系统是应用程序运行的环境。操作系统从软件上可主要分为两大类:类Unix和Windows操作系统。ios和andriod都属于前者。操作系统通常是用c语言写出来的,因为它有着最高的执行效率。
玩过单片机的朋友们应该知道,对于没有操作系统的单片机的开发(慕斯和小伙伴cjc称它为“裸开发”),实际做的就是应用程序和驱动程序的混合体,即将驱动揉合于应用程序之中。正是由于上面提到的操作系统才将两者分离开来,实现模块和分层化编程。驱动程序是最贴近底层硬件的程序,它直接操控硬件。驱动程序屏蔽了底层硬件细节,提供了上层应用操控底层硬件的接口,简化了上层应用开发。比如让显卡显示图像,它会先发送指令到显卡驱动程序,驱动程序收到指令后,将其翻译成显卡能明白的电子信号,这样显卡就可以显示图像了。
终于到达最后一站---- 底层硬件了。像智能手机这样成熟的产品,其采用的芯片都是工艺成熟性能稳定的,慕斯最近在做FPGA 的开发,对此也略有感悟:for example ,如果说FPGA 是陶泥,那么芯片就犹如一款精美的手工陶艺作品。FPGA 可以实现几乎任何功能的芯片原型,用FPGA 实现一款功能简单的CPU 是我近期感兴趣的方向。相比于软件编程,FPGA 编程最大的特点在于生成功能模块,此过程为“无中生有”;而软件编程即在CPU 上的编程,是一个合理利用CPU 已有资源如寄存器、ALU ,进行精确控制来实现相应功能的过程。CPU 的这些资源恰恰可以通过硬件编程创造出来,我们可以自己实现一个CPU ,自己定义它的指令集,自己编写一个编译器,然后就可以用通用的C 语言在上面做开发。所以硬件编程是一个创造性的过程,其设计可以由verilog/VHDL 这样的硬件编程语言来完成,你根据所需功能写出相应模块,程序经过综合、翻译和实现三个步骤最终生成对应FPGA 最小颗粒的网表映射文件,就像高级编程语言经过编译链接最终生成机器码,这两个过程有异曲同工之妙。通过硬件编程可以创造出一款芯片的原型,进行功能测试,符合要求则可以制成流片或选择相应功能芯片实现最终产品。
至此,慕斯对于整个智能手机结构的理解就陈述完了,请各位尽情拍砖。
|