第 1 章 嵌入式C语言概述

        嵌入式C语言是一种用于编写嵌入式系统软件的编程语言。嵌入式系统是指嵌入在其他设备或系统中的计算机系统,通常用于控制和监控硬件设备的操作。嵌入式C语言是一种高级语言,它提供了一种结构化的编程方法,并且具有适应嵌入式系统特性的特定语法和功能。

        嵌入式C语言主要用于开发嵌入式系统的底层软件,包括驱动程序、操作系统、实时系统和应用程序等。与传统的桌面应用程序相比,嵌入式系统通常具有资源有限、实时性要求高、对硬件的直接访问等特点,因此,嵌入式C语言需要具备更高的效率和可靠性。

        在嵌入式C语言中,开发者可以使用标准的C语言语法和库函数,但也需要了解一些特殊的概念和技术,如寄存器操作、中断处理、内存管理等。此外,嵌入式C语言还提供了一些特定的关键字和限定符,用于定义和控制嵌入式系统的硬件资源和功能。

        嵌入式C语言的学习和应用需要具备扎实的C语言基础,并且对嵌入式系统的原理和工作方式有一定的了解。通过学习嵌入式C语言,开发者可以理解和掌握嵌入式系统软件的开发流程和技术要点,提高嵌入式软件的效率和可靠性。


1.1  C语言概述及应用领域

        C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

1.1.1 简介

        C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此C语言可以编写系统软件。

        当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。

        C语言拥有经过了漫长发展历史的完整的理论体系,在编程语言中具有举足轻重的地位。

1.1.2 发展历史

        C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,C语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。

        C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。

        1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

        20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratories)的研究员肯·汤普森(Kenneth Lane Thompson)闲来无事,想玩一个自己编程的模拟在太阳系航行的电子游戏——Space Travel。他背着老板,找到了台空闲的小型计算机——PDP-7。但这台电脑没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。后来,这个操作系统被命名为——UNICS(Uniplexed Information and Computing Service)。

        1969年,美国贝尔实验室的Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母),并且用B语言写了初版UNIX操作系统(叫UNICS)。

        1971年,同样酷爱Space Travel的丹尼斯·里奇为了能早点儿玩上游戏,加入了汤普森的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。

        1972年,美国贝尔实验室的丹尼斯·里奇在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

        1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了“Space Travel”,一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到2020年,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承自汤普逊和里奇的代码。

        在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha、SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可在哪种架构的处理器运行。

        1977年,丹尼斯·里奇发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

        C语言继续发展,在1982年,很多有识之士和美国国家标准协会(ANSI)为了使C语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商、编译器及其他软件工具生产商、软件设计师、顾问、学术界人士、C语言作者和应用程序员组成。1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159-1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准化组织(International Standard Organization,ISO)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899:1990也通常被简称为“C90”。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。

        在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899:2011,简称为“C11”。

1.1.3 语言特点

        C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且C语言的处理和表现能力都非常强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。C语言的主要特点如下:

  • 简洁的语言

        C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故C语言拥有非常简洁的编译系统。

  • 具有结构化的控制语句

        C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、if...else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。

  • 丰富的数据类型

        C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。

  • 丰富的运算符

        C语言包含34个运算符,它将赋值、括号等均视作运算符来操作,使C程序的表达式类型和运算符类型均非常丰富。

  • 可对物理地址进行直接操作

        C语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。

  • 代码具有较好的可移植性

        C语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用C语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的C程序可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。

  • 可生成高质量、目标代码执行效率高的程序

        与其他高级语言相比,C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。

        C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它还具有自己独特的特点。具体体现为以下三个方面:

一、广泛性

        C语言的运算范围的大小直接决定了其优劣性。C语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。C语言中包含了字符型、指针型等多种数据结构形式,因此更为庞大的数据结构运算它也可以轻松应付。

二、简洁性

        C语言的基础特性包含有9类控制语句和32个关键字,这使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同时还能够支持高级编程,避免了语言切换的繁琐。

三、结构完善

        C语言是一种结构化语言,它可以通过组建模块单位的形式实现模块化的应用程序,在系统描述方面具有显著优势,同时这一特性也使得它能够适应多种不同的编程要求,且执行效率高。

        C语言的缺点也比较明显,其中一点就是数据的封装性较弱。这意味着C语言在数据的安全性方面存在一定的缺陷。与C++相比,C语言缺乏面向对象的特性,无法提供封装、继承和多态等高级特性。这使得C语言处理数据相对较为困难。

        另外,C语言的语法限制相对较宽松,对变量的类型约束不太严格,这可能导致一些安全性问题。例如:C语言对数组的下标越界没有进行检查,这可能导致程序的运行时错误。

        从应用的角度来看,相对于其他高级语言,使用C语言较为困难。它需要程序员对程序设计的细节和底层知识有更深入的了解。因此,对于使用C语言的人来说,需要更熟练地掌握程序设计的技巧。

        C语言是一种通用的高级编程语言,广泛应用于系统软件开发、嵌入式系统、游戏开发、科学计算、网络编程等领域。它的设计目标是提供一种简单、高效、可移植的编程语言,适用于各种不同的硬件平台和操作系统。


1.2 嵌入式系统概述及应用领域

        嵌入式系统由硬件和软件组成,是能够独立进行运作的器件。其软件内容只包括软件运行环境及其操作系统。硬件内容包括信号处理器、存储器、通信模块等在内的多方面的内容。相比于一般的计算机处理系统而言,嵌入式系统存在较大的差异性, 它不能实现大容量的存储功能,因为没有与之相匹配的大容量介质,大部分采用的存储介质有E-PROM、EEPROM 等, 软件部分以API编程接口作为开发平台的核心。

1.2.1 简介

        嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。上述语句中的要点概括:

  • 以应用为中心

        强调嵌入式系统的目标是满足用户的特定需求。就绝大多数完整的嵌入式系统而言,用户打开电源即可直接享用其功能,无需二次开发或仅需少量配置操作。

  • 专用性

        嵌入式系统的应用场合大多对可靠性、实时性有较高要求,这就决定了服务于特定应用的专用系统是嵌入式系统的主流模式,它并不强调系统的通用性和可扩展。这种专用性通常也导致嵌入式系统是一个软硬件紧密集成的最终系统,因为这样才能更有效地提高整个系统的可靠性并降低成本,并使之具有更好的用户体验。

  • 以现代计算机技术为核心

        嵌入式系统的最基本支撑技术,大致上包括集成电路设计技术、系统结构技术、传感与检测技术、嵌入式操作系统和实时操作系统技术、资源受限系统的高可靠软件开发技术、系统形式化规范与验证技术、通信技术、低功耗技术、特定应用领域的数据分析、信号处理和控制优化技术等,它们围绕计算机基本原理,集成进特定的专用设备就形成了一个嵌入式系统。

  • 软硬件可裁剪

        嵌入式系统针对的应用场景如此之多,并带来差异性极大的设计指标要求(功能性能、可靠性、成本、功耗),以至于现实上很难有一套方案满足所有的系统要求,因此根据需求的不同,灵活裁剪软硬件、组建符合要求的最终系统是嵌入式技术发展的必然技术路线。

1.2.2 发展历史

        嵌入式计算机的真正发展是在微处理器问世之后。1971年11月,算术运算器和控制器电路成功的被集成在一起,推出了第一款微处理器,其后各厂家陆续推出了8位、16位微处理器。以这些微处理器为核心所构成的系统广泛地应用于仪器仪表、医疗设备、机器人、家用电器等领域。微处理器的广泛应用形成了一个广阔的嵌入式应用市场,计算机厂家开始大量地以插件方式向用户提供OEM产品,再由用户根据自己的需要选择一套适合的CPU板、存储器板及各式I/O插件板,从而构成专用的嵌入式计算机系统,并将其嵌入自己的系统设备中。

        20世纪80年代,随着微电子工艺水平的提高,集成电路制造商开始把嵌入式计算机应用中所需要的微处理器、I/O接口、A/D转换器、D/A转换器、串行接口,以及RAM、ROM等部件全部集成到一个VLSI中,从而制造出面向I/O设计的微控制器,即单片机。

        20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步快速发展。面向实时信号处理算法的DSP产品向着高速、高精度、低功耗的方向发展。

        21世纪是个网络盛行的时代,将嵌入式系统应用到各类网络中是发展的重要方向。

        嵌入式系统的发展大致经历了以下三个阶段:

        第一阶段:嵌入技术的早期阶段。嵌入式系统以功能简单的专用计算机或单片机为核心的可编程控制器形式存在,具有监测、伺服、设备指示等功能。这种系统大部分应用于各类工业控制和飞机、导弹等武器装备中。

        第二阶段:以高端嵌入式CPU和嵌入式操作系统为标志。这一阶段系统的主要特点是计算机硬件出现了高可靠、低功耗的嵌入式CPU,如ARM、PowerPC等,且支持操作系统,支持复杂应用程序的开发和运行。

        第三阶段:以芯片技术和Internet技术为标志。微电子技术发展迅速,SOC(片上系统)使嵌入式系统越来越小,功能却越来越强。大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展及Internet技术与信息家电、工业控制技术等结合日益密切,嵌入式技术正在进入快速发展和广泛应用的时期。

1.2.3 嵌入式分类

  • 嵌入式微处理器

        嵌入式微处理器(Embedded Microprocessor Unit,EMPU)是以通用计算机中的标准CPU为微处理器,并将其装配在专门设计的电路板上,且仅保留与嵌入式应用有关的母板功能,构成嵌入式系统。与通用计算机相比,其系统体积和功耗大幅度减小,而工作温度的范围、抗电磁干扰能力、系统的可靠性等方面均有提高。

        在EMPU中,微处理器是整个系统的核心,通常由3大部分组成:控制单元、算术逻辑单元和寄存器。嵌入式微处理器其结构说明见下图1-1所示。

图1-1  嵌入式微处理器基本结构示意图
  • 嵌入式微控制器

        嵌入式微控制器(Microcontroller Unit,MCU)又称单片机。它以某一种微处理器为核心,芯片内部集成有一定容量的存储器(ROM/EPROM、RAM)、I/O接口(串行接口、并行接口)、定时器/计数器、看门狗、脉宽调制输出、A/D转换器、D/A转换器、总线、总线逻辑等。与嵌入式微处理器相比,微控制器的最大特点是单片化、体积小、功耗低、可靠性较高。微控制器是嵌入式系统工业的主流。嵌入式微控制器其基本结构示意图如图1-2所示。

图1-2  嵌入式微控制器基本结构示意图
  • 嵌入式微处理器

        嵌入式数字信号处理器(Embedded Digital Signal Processor,EDSP)对系统结构和指令进行了特殊设计,使其适合执行DSP算法,编译效率高,指令执行速度也较快,在数字滤波、FFT、谱分析等方面,DSP算法已广泛应用于嵌入式领域,DSP应用正从在单片机中以普通指令实现DSP功能,过渡到采用EDSP。嵌入式微处理器基本结构示意图如图1-3所示。

图1-3  嵌入式微处理器基本结构示意图
  • 嵌入式片上系统

        嵌入式片上系统(System on Chip,SoC)是集系统性能于一块芯片上的系统组芯片。它通常含有一个或多个微处理器IP核(CPU),根据需求也可增加一个或多个DSP IP核,相应的外围特殊功能模块,以及一定容量的存储器(RAM、ROM)等,并针对应用所需的性能将其设计集成在芯片上,成为系统操作芯片。其主要特点是嵌入式系统能够运行于各种不同类型的微处理器上,兼容性好,操作系统的内核小,效果好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值