标题: C语言嵌入式系统编程修炼之道 (共29页pdf) [打印本页]

作者: zjlzdf    时间: 2018-11-15 16:35
标题: C语言嵌入式系统编程修炼之道 (共29页pdf)

1.背景
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择。而与之相比,C 语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择。笔者在嵌入式系统项目的开发过程中,一次又一次感受到 C 语言的精妙,沉醉于 C 语言给嵌入式开发带来的便利。

图 1 给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台。它包括两部分:  

  (1) 以通用处理器为中心的协议处理模块,用于网络控制协议的处理;
  (2)  以数字信号处理器(DSP)为中心的信号处理模块,用于调制、解调和数/模信号转换。

  本文的讨论主要围绕以通用处理器为中心的协议处理模块进行, 因为它更多地牵涉到具体的 C 语言编程技巧。而 DSP 编程则重点关注具体的数字信号处理算法,主要涉及通信领域的知识,不是本文的讨论重点。

  着眼于讨论普遍的嵌入式系统 C 编程技巧, 系统的协议处理模块没有选择特别的 CPU,而是选择了众所周知的 CPU芯片--80186,每一位学习过《微机原理》的读者都应该对此芯片有一个基本的认识,且对其指令集比较熟悉。80186 的字长是 16 位,可以寻址到的内存空间为 1MB,只有实地址模式。C 语言编译生成的指针为 32 位(双字) ,高16 位为段地址,低 16 位为段内编译,一段最多 64KB。

程序,后者则是程序运行时指令及数据的存放位置。系统所选择的 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空间的内容。


完整的pdf格式文档51黑下载地址(共29页):
C语言嵌入式系统编程教程.pdf (611.26 KB, 下载次数: 229)



作者: 穿裤子的云ZZ    时间: 2019-2-28 16:45
好资料
作者: lemaden520    时间: 2021-4-18 19:48
好评!
作者: zhengjianping    时间: 2021-6-12 17:02
非常好的资料,多谢楼主的无私分享精神!
作者: 94305410    时间: 2021-6-19 19:43
非常好,值得收藏
作者: gxzqh    时间: 2021-8-12 15:22
非常好的资料,多谢楼主的无私分享精神
作者: zhengjianping    时间: 2021-10-12 21:29
非常好的学习资料,谢谢分享!
作者: 刺头少年    时间: 2022-6-9 10:35
很棒,里面的位处理等说法很值得借鉴和学习,感谢分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1