嵌入式学习
概念
**本地编译:**在当前编译平台下编译出来的程序只能在当前平台下运行。
**交叉编译:**在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序。
gcc是GNU Compiler Collection(就是GNU编译器套件)支持编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。当程序只有一个源文件时,直接就可以用gcc命令编译它。很多个源文件时,用gcc命令逐个去编译时,混乱而且工作量大。所以出现了make工具,一个批处理工具,本身并没有编译和链接的功能,makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。makefile在一些简单的工程可以手写,但是当工程非常大的时候,也很麻烦的,如果换了个平台makefile又要重新修改。所以出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。cmake根据CMakeLists.txt文件(学名:组态档)去生成makefile。CMakeLists.txt文件需要你自己手写的。当然如果使用IDE,你只需要按一下编译图标。
指令
每一条指令可完成一个独立的算术运算或逻辑运算操作。一台计算机支持(或称使用)的全部指令构成该机的指令系统。指令系统直接与计算机系统的性能和硬件结构的复杂程度等密切相关,它是设计一台计算机的起始点和基本依据。
计算机的指令有微指令,机器指令和宏指令之分。
控制部件通过控制线向执行部件发出各种控制命令,通常把这种控制命令叫做微命令。微指令是微程序级的命令,它属于硬件;宏指令是由若干条机器指令组成的软件指令,它属于软件; 而机器指令则介于微指令与宏指令之间,通常简称为指令。
伪指令
ARM 汇编程序的由机器指令,伪指令和宏指令组成。指令是控制程序运行时的机器代码运作的,是CPU执行的依据,编程、编译、执行都是有效的。伪指令不直接控制运行时刻的机器,但是控制翻译程序如何生成机器指令代码,汇编结束消失。伪指令和指令集在汇编时会被合适的机器指令代替,实现真正机器指令操作。
伪:EQU、LDR、DCI指令长度内存、DCD字、DCB字节(data continu)
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。 LDR , =
指令:MOV STR BL
符号定义伪指令
用于定义ARM 汇编程序的变量,对变量进行赋值以及定义寄存器名称,该类伪指令如下:
全局变量声明:GBLA、GBLL 和GBLS。
局部变量声明:LCLA、LCLL 和LCLS。
变量赋值: SETA、SETL 和SETS。
数据定义伪指令
用于数据表定义,文字池定义,数据空间分配等。该类伪指令如下:
定义一个结构化的内存表的首地址:MAP。
定义结构化内存表中的一个数据域:FIELD。
声明一个文字池:LTORG。 LTORG 伪指令常放在无条件跳转指令之后,或者子程序返回指令之后,这样处理器就不会错误地将文字池中的数据当作指令来执行。
…
LDR R0,=0x12345678
ADD R1,R1,R0
MOV PC,LR
LTORG ;声明文字池,此地址存储0x12345678
… ;其它代码
报告伪指令
用于汇编报告指示。该类伪指令如下:
断言错误:ASSERT。
汇编诊断信息显示:INFO。
设置列表选项:OPT。
插入标题:TTL 和SUBT。
汇编控制伪指令
用于条件汇编、宏定义、重复