嵌入式Linux与物联网软件开发——C语言内核深度解析这本书讲的是什么

简介:   针对性强:面向嵌入式Linux内核源码、底层驱动软件开发等技术方向。   精华原创:凝结作者多年研发及教学经验,帮助读者真正深度理解难点。   求职必读:详解常见面试题,完全应对 “嵌入式软件工程师”岗位需求。

其实我们不知道的是,早期的计算机是没有内存的,但是如今我们去买电脑时,都会十分关心电脑内存的各种参数,因此可以看出内存对于电脑性能的重要性。那么为什么需要内存呢?换句话说,内存与计算机以及程序之间的关系又是什么呢?本章将会以内存为中心,探讨许多与内存相关的概念和话题,这些概念是学好后续C语言知识不可缺少的基础,因此希望读者认真对待本章节的内容。

程序是什么?最为直观的表达就是:程序=数据+算法。对于计算机来说,一个程序就是一堆代码加一堆数据。代码告诉CPU如何加工数据,而数据则是被加工的对象。例如我们写一个加法程序,对于计算机来说,代码告诉CPU是执行加法,数据就是加数和被加数。当然,我们也可以将加法运算的过程封装成一个函数,即便不封装成一个子函数,那它也是在主函数(main)里。C语言程序就是由一个个函数组合而成,这也是C语言模块化的一个强烈表现。

既然我们已经知道了程序是什么,那么我们接下来就可以来探讨计算机运行程序的目的是什么了。其实运行程序的目的无外乎如下几个:要么是得出一个确定的运行结果;要么是关注运行的过程;要么二者皆有。得到一个结果还是可以理解的,但说程序运行只是为了过程可能就不太好理解了,设想那些没有返回值的函数不都是在注重过程,它们并不会返回一个结果。

函数程序的形参就是待加工的数据,当然函数内还需要一些临时数据(局部变量),函数本体就是代码(程序的组成:数据+算法),函数的返回值就是结果,函数体的执行就是过程,所以说函数的运行目的是:结果、过程或者二者全有。

· 例子1

int add(int a, int b) { return a + b; } // 这个函数的执行就是为了得到结果

· 例子2

void add(int a, int b) { int c; c = a + b; printf("c = %d\n", c); } // 这个函数的执行重在过程(重在过程中的printf),不需要返回值

· 例子3

int add(int a, int b) { int c; c = a + b; printf("c = %d\n", c); return c; } // 这个函数既重结果又重过程

通过上面的例子,大家应该有了新的认识,理解了程序的组成和程序运行的目的。

上一节我们探讨了什么是程序,以及运行程序的目的是什么。这一节我们准备谈一谈存储和运行程序的硬件—内存。内存大致分为静态内存(StaticRAM,SRAM)和动态内存(Dynamic RAM,DRAM)。

SRAM的性能非常高,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,如CPU的一级缓冲、二级缓冲;而DRAM的速度要比SRAM慢,但是DRAM的价格比SRAM便宜很多。DRAM又有好多代,譬如最早的SDRAM,后来的DDR1、DDR2……,LPDDR,我们这里介绍其中一种DDR。

DDR(Doubk Date Rate)是一种改进型的RAM,它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了,并且它有着很好的成本优势,因此DDR是目前电脑中用得最多的内存。目前在很多高端的显卡上,大都配备了高速DDR,用于提高带宽,以求大幅度提高对3D加速卡像素的渲染能力。

DDR内存

不管是SRAM还是DRAM,对于编程者来说,并不需要详细了解其内部原理,只需要使用即可。实际上内存就是存储代码和数据的,这就是内存的本质。那么内存中到底存储的是什么东西呢?数据和代码以什么样的方式存储在内存中呢?我们接下来就会讲到。

版权:人民邮电出版社