首页计算机书籍计算机语言《嵌入式系统高级C语言编程》凌明
碧泉

文档

220

关注

0

好评

0
PDF

《嵌入式系统高级C语言编程》凌明

阅读 782 下载 0 大小 18.91M 总页数 325 页 2022-11-23 分享
价格:¥ 10.00
下载文档
/ 325
全屏查看
《嵌入式系统高级C语言编程》凌明
还有 325 页未读 ,您可以 继续阅读 或 下载文档
1、本文档共计 325 页,下载后文档不带www.pdfdz.com水印,支持完整阅读内容。
2、古籍基本都为PDF扫描版,所以文档不支持编辑功能,即不支持文档内文字的复制粘贴。
3、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
4、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
5、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。
第1章概述1978年,Steve Johnson编写了PCC编译器(Portable C Compiler,可移植的C编译器)。由于嵌这个编译器的源码可以在贝尔实验室之外公开,故该编译器被广泛地移植到不同的处理器上,式成为当时C编译器的共同基石。同年,C语言的经典著作《C编程语言》(“The C Program-ming Language'”)出版,为了表示对该书两位作者Brain Kernighan和Dennis Ritchie的敬意,统书中的C版本被称为“K&RC”(出版社当时估计能卖掉1000本就不错了,然而截至1994年这本书一共卖了150万册)。级到20世纪80年代早期,C语言已经被业界广泛采用了,但是随之而来的是多种不同的语实现和版本。比如为了适应80X86的特殊地址架构,微软公司的C语言版本增加了一些新的关键字(如far、near等)。随着越来越多的非pcc基础的C语言版本出现,C语言逐渐形成了类似于BASIC语言一样的松散语言家族。1983年,美国国家标准化协会(ANSI)根据C语言程问世以来各种版本对C语言的发展和扩充制定了ANSI C标准,1989年12月再次做了修订,并最终确认了该标准。国际标准化组织(ISO)随后接受了该标准作为国际标准。ANSI C标准有4个主要部分,分别是第4部分“简介”、第5部分“环境”、第6部分“C语言”、第7部分“C运行库”。该标准还有几个有用的附件,比如附件F“一般警告信息”、附件G“可移植性问题”等。需要说明的是,虽然ANSI C标准规范了C语言的实现,但是在实际情况中,各家C语言提供商都会根据各平台的不同情况对ANSI C进行一定的扩展,比如我们上面提到的微软的C语言实现中增加了关键字far、near;又比如在嵌入式领域ARM的C编译器增加了关键字long long以支持64位整数,增加了关键字irq以支持C语言编写的中断处理程序(注意:在有些编译器中有类似的关键字#intrrupt)。如图1-1所示,我们可以将现实中的C语言实现看作是ANSI C的一个超集,这些厂商对ANSI C的扩展部分有可能彼此不兼容,从而使得C程序的移植需要对这些非标准的部分特别小心。在这个问题上比较有代表性的例子是Liux的gcc编译器。由于该编译器对ANSI C进行了非常多的扩展,Liux的内核源码基本上只能在gcc上进行编译,希望通过其他C编译器编译Liux内核几乎是不可能的。另外一个需要注意的问题是,虽然ANSI C对C语言的规范进行了非常详细的约定,但是由于C语言的实现平台纵跨了从8位单片机CPU到32位甚至64位CPU的硬件环境,因此在数据类型的约定上标准C必须有足够的灵活性。比如ANSI C只规定了char数据类型是一个8位的数据,但是并没有规定int、short,long类型应该是多少位。这就造成了不同C编译器对于这些数据类型的不同约定,比如Borland公司的Turbo C规定int类型是16位整数;但是ARM的编译器规定int类型是32位整数,Freescale的68000编译器关于int、short、long类型的数据宽度是可以配置的。因此,嵌人式软件程序员在编写C代码时或者从其他处理器平台移植C代码时必须非常谨慎地处理这些与编译器相关的内容。C语言的特点主要有以下几点:第1章概述①语言简洁、紧凑,使用方便、灵活。C只有32个关键字,9种控制语句。较之其他高级语言,C语言的关键字非常少,一方面是语言本身的设计使然,另一个重要的原因是因为C语嵌言将所有与外围硬件设备相关的输人/输出操作统统放在C运行库中实现,比如从键盘输入、入向屏幕输出、文件的操作等都没有作为C语言关键字出现,而是以库函数的方法加以实现。系这样做的好处一方面使得语言的实现变得比较简洁(编译器的实现也会比较简单),另一方面由于与硬件设备相关的功能以函数的方法实现,使得C语言本身尽可能与硬件平台无关,这高也是C语言能够在如此众多的硬件平台上实现的重要原因。某商用C编译器1语ANSI C标准某商用编译器2某商用编译器33图1-1 ANSI C与商用C编译器的关系②运算符很丰富,C语言一共有34种运算符,但关键字只有32个。C语言中包含了一些特有的运算符。比如:自增自减运算符十十和一一:针对指针运算的取内容运算符和取地址运算符心:针对位运算的移位运算符<<和>>,按位与&、按位或、按位异或、按位取反~:等。这些运算符大大方便了程序员在进行底层代码编写的过程中对存储器、控制寄存器等硬件资源进行操作。③数据结构丰富,C语言的数据类型支持整型、实型、字型符、数组、指针、结构(struct).、共用体(union)、枚举类型(enum)。与其他高级语言不太一样的是,C语言没有字符串类型。这也是我个人认为C语言在处理字符串问题时比较不方便的原因。事实上,在很多需要对字符串进行处理的应用中(比如脚本的解释程序,像早期Wb应用中的CGI脚本)往往更多地采用非常适合字符串处理的Prl语言进行编写,而不经常采用C语言。④具有结构化的控制语句,在C语言中支持if…else、while、do…while、switch…case、for这些结构化的控制语句,我们后面会专门讨论这些控制语句。虽然C语言和绝大多数高级语言一样保留了goto关键字,而且C的语言结构也没有PASCAL那样严格和规范,但是总的来说C语言依然是非常好的结构化编程语言。⑤C语言的语法限制不太严格,程序设计自由度大。这是一个双刃剑。C语法非常宽容。比如C语言里面不检查数组越界,它是C语言里面很重要的一个特点,虽然这看起来是一个不好的特点,但是在一些优秀的程序员手中,这个特点也可以变成一个非常灵活的、并且
返回顶部