嵌入式wince基础知识
因项目需要,用到手持设备的开发,手持设备搭载的是wince系统,之前多多少少接触过嵌入式编程,一直以为自己的处女开发是在Linux,没想到还是没逃出微软的“魔掌”,不开心归不开心,项目还得继续,先学习嵌入式wince的基本知识吧,为以后的开发打好基础。
什么是嵌入式系统
我现在觉得有些概念经过一段时间的沉淀,进进出出大脑多次,就能体会到一点点的不一样的味道,就像嵌入式系统,之前看一些定义,一点感觉都没有,理解不能,囫囵吞枣的感觉不好,现在有一些时间了,也接触过几个小项目,慢慢的就觉得嵌入式系统就是针对通用系统(PC)提出的针对特定应用而存在的概念,这些系统都突出某些功能,而对其他功能没有需求,甚至根本就不需要,比如我的电脑,通用型的,几乎各个功能模块它都有,显示,键盘,办公软件,等等面向的是大众人群,相对的嵌入式可能就只注重莫一方面的功能,如只注重声音播放(MP3),只需要通信(功能机)等等,所以在mp3里面根本就不需要显卡啊,在功能机上就根本不要网卡啊,这也是可裁剪的官方用词吧。
嵌入式系统分为软件和硬件部门,两个部分都是可裁剪的,硬件可以定制,同样软件也是可以定制,嵌入式操作系统亦是,比如不需要某个module。wince是嵌入式操作系统的一种,另外一种是linux,自己无知,肯定还有其他的,就知道这两个。wince裁剪一下可以出来很多知名的其他系统,但都是变种,不能脱离嵌入式系统的概念,比如windows phone windowsxpe等
嵌入式系统开发
现在来看,开发分软硬两个大的方向,因为都是可裁剪的,根据功能选择或者设计合适的硬件算是一个方向,嵌入式软件的开发又分为驱动开发和应用开发两个方向,驱动开发向下面向硬件,因为硬件是由厂家定制的,所以只有有相应的驱动,别人才可以使用,向上提供给应用编程接口,方面应用程序使用系统硬件(一般应该是操作系统调用);应用开发向下面向API,直接调用驱动程序或者通过操作系统简接调用完成IO,向上面向服务,提供具体的功能,如我项目里面要用到的串口服务程序。
驱动开发,挺难的,如果设计到操作系统调用,一般就是这样,直接调用的应该叫固件吧,那还必须对操作系统内核有相当深的了解,必须使用内核api和内核调试手段去处理驱动程序,所以更多的情况是应用开发,自己虽然一直向往做一个驱动开发工程师,但是万丈高楼平地起,先了解嵌入式系统才是王道。做嵌入式应用开发就涉及到一个“交叉编译”的概念
交叉编译
是指在一个平台上开发另一个平台上运行的程序,包括内核和应用程序,因为不同的平台使用的硬件架构和软件环境都不一样,所以在交叉编译的过程中重要的一环应该是编译链接成目标平台的可执行程序,也就是编译器是关键,之前接触到编译器的概念,知道编译过程的中间代码生成,优化,目标代码生成都是与特定平台相关的,所以在嵌入式软件编写时,如果使用的是高级语言编写,涉及到的标准库或者函数时差别不大,只是应该注意特定平台的库调用,如wince sdk,这也就是不能跨平台的限制所在。当可执行程序生成时,编译器会根据目标平台的指令集(也就是系统架构)生成合适的代码,即平台的指令集才是编译时候的区别所在,生成的代码自然也就只能在该平台下运行。
根据上面的概念,在进行嵌入式应用软件开发时,必须要有的准备工作或者说工具有交叉编译器,目标平台的库,代码编辑器,嵌入式设备的连接工具,其中连接工具用来读取或者下载我们编译好的程序到目标平台上。这些工具的,交叉编译环境的搭建也是不少的知识点在里面,网上各类的博客、文章记录的重点也是在这个方面,下面的工作就是实际搭建一个这样的环境,不然没有办法进行项目开发啊,祝顺利……