编译器、硬件控制原理与地址映射表

编译器(compiler)

是一种计算机程序,它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。

它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

一个现代编译器的主要工作流程如下:

源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(Linker)→ 可执行文件(executables),最后打包好的文件就可以给计算机去判读运行了。

编译器分类

编译器的一种分类方式是按照生成代码所运行的系统平台划分,这个平台称为目标平台。

有一些编译器输出的代码,将运行于与编译器所在相同类型的计算机和操作系统之上,这种编译器叫做本地编译器。输出可以运行于不同的平台之上的编译器,叫做交叉编译器。由于嵌入式系统通常没有软件开发环境,因此,为这类系统开发软件时,通常需要使用交叉编译器。

交叉编译器(英语:Cross compiler)

是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。交叉编译器在目标系统平台(开发出来的应用程序序所运行的平台)难以或不容易编译时非常有用。
交叉编译器的存在对于从一个开发主机为多个平台编译代码是非常有必要的。直接在平台上编译有时行不通,例如在一个嵌入式系统的单片机 ,因为它们没有操作系统,所以直接编译行不通。
交叉编译器和源代码至源代码编译器不同,交叉编译器用于二进制代码的跨平台软件开发,而源到源编译器是将某种编程语言的程序源代码作为输入,生成以另一种编程语言构成的等效源代码的编译器,但两者都是编程工具。

交叉编译器的基本用法就是将构建环境与目标环境分开。常在下面几种情况中使用:

  • 嵌入式计算机。这种设备的资源有限,举例来说:微波炉有一个非常小的计算机来读取其触摸板和门传感器,并向数字显示器和扬声器提供输出,以控制用于烹饪食物。这台计算机不足以运行编译器,文件系统或开发环境,因为调试和测试需要更多的嵌入式系统资源,使得在目标机上编译变得更不可能。采用交叉编译,在资源足够的机器上完成构建工作,就可以解决这个问题。
  • 编译多个目标库。举个例子,一个公司可能希望支持不同版本或不同种类的操作系统,有了交叉编译,便可以为每个目标设置一个编译环境进行编译。如:在Windows中为底层构造完全不同的Linux编译程序;在计算机上为移动端操作系统构建程序。
  • 在服务器上编译。类似于在多个机器进行编译,一个复杂的编译可能会涉及到许多的编译操作,可以将这些编译操作放到空闲的机器上执行,无论其底层硬件或其运行的操作系统版本如何。
  • 引导一个新平台。在为新平台开发软件,或者开发/使用未来平台的仿真器时,则使用交叉编译器来编译必要的工具,如操作系统和本机编译器。

交叉编译器与本地编译器的区别与联系

事实上,他们都是将高级语言编译成计算机所能识别的机器语言,也就是可执行文件,从而让CPU执行程序以完成功能,从这点上看,他们是相同的,但是由于不同的CPU,其内部硬件结构不同,其所实现的一系列操作cpu的方式也就不同,故在具体的编译细节上也不同,由于有些程序在目标系统平台(开发出来的应用程序序所运行的平台)难以或不容易编译,这时交叉编译器就非常有用。

相关概念转载于:https://www.cnblogs.com/smallqing/p/10431004.html

硬件控制原理

在这里插入图片描述
硬件控制原理概念:
CPU本身是不能直接控制硬件的,硬件一般是由其对应的控制器来控制, SOC中将各个硬件控制器的寄存器映射到了CPU地址空间中的一段范围,这样CPU就可以通过读写寄存器来间接控制硬件
注:这里的寄存器在SOC中但在CPU之外,有地址,访问方式与内存一样,常用于控制硬件

ARM处理器中的寄存器(如PC、LR、SP)与硬件控制器中的寄存器的本质区别:
CPU中的寄存器,没有地址,使用名字访问;
而硬件控制器中的寄存器在SOC中但在CPU之外,有地址,访问方式与内存一样(LDR/STR),用于控制硬件

地址映射表

在一个处理器中,一般会将Flash、RAM、寄存器等存储设备分别映射到寻址空间中的不同地址段,我们将这个映射关系成为这个处理器的地址映射表。其可以通过手册查询到,不同的芯片有不同的映射关系。
在这里插入图片描述


版权声明:本文为m0_73492050原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。