不同于一般方式的软件编程,嵌入式体系编程树立在特定的硬件渠道上,必然要求其编程言语具有较强的硬件直接操作能力。无疑,汇编言语具有这样的特质。可是,归因于汇编言语开发进程的杂乱性,它并不是嵌入式体系开发的一般挑选。而与之比较,C言语–一种”高档的初级”言语,则成为嵌入式体系开发的最佳挑选。笔者在嵌入式体系项目的开发进程中,一次又一次感受到C言语的精妙,沉醉于C言语给嵌入式开发带来的便当。
(1)以通用处理器为中心的协议处理模块,用于网络操控协议的处理;
(2)以数字信号处理器(DSP)为中心的信号处理模块,用于调制、解调和数/模信号转化。
本文的评论首要环绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到详细的C言语编程技巧。而DSP编程则要点重视详细的数字信号处理算法,首要触及通讯范畴的知识,不是本文的评论要点。
着眼于评论遍及的嵌入式体系C编程技巧,体系的协议处理模块没有挑选特别的CPU,而是挑选了众所周知的CPU芯片–80186,每一位学习过《微机原理》的读者都应该对此芯片有一个根本的知道,且对其指令集比较了解。80186的字长是16位,能够寻址到的内存空间为1MB,只要实地址形式。C言语编译生成的指针为32位(双字),高16位为段地址,低16位为段内编译,一段最多64KB。
图1 体系硬件架构 |
协议处理模块中的FLASH和RAM几乎是每个嵌入式体系的必备设备,前者用于存储程序,后者则是程序运转时指令及数据的寄存方位。体系所挑选的FLASH和RAM的位宽都为16位,与CPU共同。
实时钟芯片能够为体系守时,给出当时的年、月、日及详细时刻(小时、分、秒及毫秒),能够设定其通过一段时刻即向CPU提出中止或设定报警时刻到来时向CPU提出中止(相似闹钟功用)。
NVRAM(非易失掉性RAM)具有掉电不丢掉数据的特性,能够用于保存体系的设置信息,比如网络协议参数等。在体系掉电或重新启动后,依然能够读取从前的设置信息。其位宽为8位,比CPU字长小。文章特意挑选一个与CPU字长不共同的存储芯片,为后文中一节的评论创造条件。
UART则完结CPU并行数据传输与RS-232串行数据传输的转化,它能够在接收到[1~MAX_BUFFER]字节后向CPU提出中止,MAX_BUFFER为UART芯片存储接收到字节的最大缓冲区。
键盘操控器和显现操控器则完结体系人机界面的操控。
以上供给的是一个较齐备的嵌入式体系硬件架构,实践的体系或许包括更少的外设。之所以挑选一个齐备的体系,是为了后文更全面的评论嵌入式体系C言语编程技巧的方方面面,一切设备都会成为后文的剖析方针。
嵌入式体系需求杰出的软件开发环境的支撑,因为嵌入式体系的方针机资源受限,不或许在其上树立巨大、杂乱的开发环境,因而其开发环境和方针运转环境彼此别离。因而,嵌入式使用软件的开发方式一般是,在宿主机(Host)上树立开发环境,进行使用程序编码和穿插编译,然后宿主机同方针机(Target)树立衔接,将使用程序下载到方针机上进行穿插调试,通过调试和优化,最终将使用程序固化到方针机中实践运转。
CAD-UL是适用于x86处理器的嵌入式使用软件开发环境,它运转在Windows操作体系之上,可生成x86处理器的方针代码并通过PC机的COM口(RS-232串口)或以太网口下载到方针机上运转,如图2。其驻留于方针机FLASH存储器中的monitor程序能够监控宿主机Windows调试渠道上的用户调试指令,获取CPU寄存器的值及方针机存储空间、I/O空间的内容。
图2 穿插开发环境 |
后续章节将从软件架构、内存操作、屏幕操作、键盘操作、功能优化等多方面论述C言语嵌入式体系的编程技巧。软件架构是一个微观概念,与详细硬件的联络不大;内存操作首要触及体系中的FLASH、RAM和NVRAM芯片;屏幕操作则触及显现操控器和实时钟;键盘操作首要触及键盘操控器;功能优化则给出一些详细的减小程序时刻、空间耗费的技巧。
在咱们的修炼旅途中将通过25个关口,这些关口主分为两类,一类是技巧型,有很强的适用性;一类则是知识型,在理论上有些含义。