嵌入式系统高级C语言编程的PDF版电子书免费下载

资料大小: 18.91 MB

所需积分: 0

下载次数:

用户评论: 0条评论,查看

上传日期: 2019-03-21

上 传 者: 易水寒他上传的所有资料

资料介绍

标签:UNIX(108)C语言(3436)嵌入式系统(1244)

  在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差,但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一-种兼有汇编语言和高级语言特性的新语言出现。

  具有讽刺意味的是,C的诞生是从失败开始的。1969年由通用电气、麻省理工、贝尔实验室联合研制的Multics操作系统几乎彻底失败,该操作系统实在是太庞大,太复杂了,以至于超出了开发团队的控制程度。从MulTIcs项目撒出后,贝尔实验室的工程师KenThompson和Dennis Ritchie开始利用业余时间将Thompson写的一个小游戏“太空旅行”移植到PDP-7小型机上,这个小游戏模拟了太阳系的行星系统,游戏者可以驾驶飞船降落在某个行星上;与此同时,Thompson还为PDP-7小型机设计了一个比MulTIcs更简单也更轻量级的操作系统,1970年Brian Kernighan模仿MulTIcs的名字将这个新操作系统戏称为“UNIX“(MulTI换成了Uni,以示这个新操作系统较之原来要简单、单纯得多)。与早期的操作系统一样,最早的UNIX采用的PDP-7是用汇编语言编写的,但是汇编语言在处理复杂数据结构时难以编码,同时也难以调试和理解。Thompson 希望能够采用高级语言来编写,在尝试FORTAN失败后,他将一种研究性的高级语言BCPL(Basic Combined Programming Language,是由伦敦大学和剑桥大学合作研发的早期高级语言)简化为一种他称之为“B”的高级语言,以使得B语言的解释器能够运行在PDP-78K的存储器中。然而由于硬件资源的限制而采用的解释执行使B的效率不高,因此B语言并不适合作为UNIX系统的编程语言,以至于Thompson在1970年将UNIX移植到PDP- 11小型机的时候依然采用了汇编语言。Dennis Ritchie 利用PDP-11更强大的硬件功能创立了“NewB”语言。这种新的语言支持多种数据类型,同时因为采用编译的运行方式而提高了性能,很快人们将“New B”称为“C”语言。

  需要说明的是,虽然ANSI C标准规范了C语言的实现,但是在实际情况中,各家C语言提供商都会根据各平台的不同情况对ANSIC进行一定的扩展,比如我们上面提到的微软的C语言实现中增加了关键字far,near;又比如在嵌入式领域ARM的C编译器增加了关键字long long以支持64位整数,增加了关键字_ irq 以支持C语言编写的中断处理程序(注意:在有些编译器中有类似的关键字# intrrupt)。如图1- 1所示,我们可以将现实中的C语言实现看作是ANSIC的一个超集,这些厂商对ANSI C的扩展部分有可能彼此不兼容,从而使得C程序的移植需要对这些非标准的部分特别小心。在这个问题上比较有代表性的例子是Linux的gcc编译器。由于该编译器对ANSIC进行了非常多的扩展,Linux的内核源码基本上只能在gcc上进行编译,希望通过其他C编译器编译Linux内核几乎是不可能的。另外一个需要注意的问题是,虽然ANSI C对C语言的规范进行了非常详细的约定,但是由于C语言的实现平台纵跨了从8位单片机CPU到32位甚至64位CPU的硬件环境,因此在数据类型的约定上标准C必须有足够的灵活性。比如ANSI C只规定了char数据类型是一一个8位的数据,但是并没有规定int .short .1ong类型应该是多少位。这就造成了不同C编译器对于这些数据类型的不同约定,比如Borland公司的Turbo C规定int类型是16位整数;但是ARM的编译器规定int类型是32位整数,Freescale的68000编译器关于int.short、long类型的数据宽度是可以配置的。因此,嵌人式软件程序员在编写C代码时或者从其他处理器平台移植C代码时必须非常谨慎地处理这些与编译器相关的内容。

  C语言的特点主要有以下几点: ①语言简洁、紧凑,使用方便、灵活。C只有32个关键字,9种控制语句。较之其他高级语言,C语言的关键字非常少,一方面是语言本身的设计使然,另一个重要的原因是因为C语言将所有与外围硬件设备相关的输人/输出操作统统放在C运行库中实现,比如从键盘输人,向屏幕输出、文件的操作等都没有作为C语言关键字出现,而是以库函数的方法加以实现。这样做的好处-。方面使得语言的实现变得比较简洁(编译器的实现也会比较简单),另一方面由于与硬件设备相关的功能以函数的方法实现,使得C语言本身尽可能与硬件平台无关,这也是C语育能够在如此众多的硬件平台上实现的重要原因。

用户评论

查看全部 条评论

发表评论请先 , 还没有账号?免费注册

发表评论

用户评论
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
上传电子资料