预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共38页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

[编程技巧]C语言嵌入式系统编程修炼之一:背景篇! 程序匠人发表于2006-1-1020:15:00阅读全文(2042)|回复(0)| 引用(0) C语言嵌入式系统编程修炼之一:背景篇! 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上, 势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的 特质。但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一 般选择。而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发 的最佳选择。笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的 精妙,沉醉于C语言给嵌入式开发带来的便利。 图1给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系 统的硬件平台。它包括两部分: (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个关口,这些关口主分为两类,一类是技巧 型,有很强的适用性;一类则是常识型,在理论上有些意义。 [编程技巧]C语言嵌入式系统编程修炼之二:软件架构篇! 程序匠人发表于2006-1-1020:19:00阅读全文(1277)|回复(1)| 引用(0) C语言嵌入式系统编