目录:
初始条件
环境建立
arm-gcc汇编简介
初始条件:
tq2440开发板
环境建立:
打算使用eclipse+yagarto的方式建立win下的开发环境.
1.需要下载的工具
eclipse-platform-3.8-win32.zip
http://archive.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/eclipse-platform-3.5-win32.zip
cdt-master-7.0.2.zip
http://ftp.neu.edu.cn/mirrors/eclipse/tools/cdt/releases/helios/dist/cdt-master-7.0.2.zip
yagarto-tools-20100703-setup.exe
http://www.yagarto.de/download/yagarto/yagarto-tools-20100703-setup.exe
yagarto-bu-2.22_gcc-4.7.1-c-c++_nl-1.20.0_gdb-7.4.1_eabi_20120616.exe
http://nchc.dl.sourceforge.net/project/yagarto/YAGARTO%20for%20Windows/20120616/yagarto-bu-2.22_gcc-4.7.1-c-c%2B%2B_nl-1.20.0_gdb-7.4.1_eabi_20120616.exe
2.工具简介
eclipse-platform是一个IDE工具的基础,在其上加上针对特定语言的插件,就可以弄成一个某种语言的IDE.
cdt-master这个就是上面提到的插件.
yagarto-tools这个东西是一个linux下编译基础工具集,其中包括了make,rm等小程序,要使用makefile进行工程管理,则这些小程序是基础.
yagarto-gcc-eabi这个东西则是arm-gcc编译工具集.
3.安装步骤
可以参考yagarto帮助网页http://www.yagarto.de/howto.html.在具体的实现过程中,越过了其中的GDB的东西.一般调试中,习惯的是printf.
1>eclipse及其插件安装
eclipse-platform是绿色软件,直接解压到某个目录下即可.不过eclipse使用java开发的应用程序,需要在本机上安装jre先.
打开eclipse,然后打开Help/Install New Software...,点击Add/Archive添加上面下载的cdt-master,然后将下面的全选即可(也可以按照yagarto网上介绍其中的选项进行).
2>安装yagarto-tool和yagarto-gcc-gabi
分别点击上面exe文件进行一半win程序安装即可.(安装目录中最后全是英文字母.同时安装之后最后重启一下).
打开win的cmd,cd到任意目录下,在其中输入touch --version确认yagarto-tool成功安装,输入arm-none-eabi-gcc --version确认yagarto-gcc-eabi成功安装.
可能会出现的问题是显示找不到这个命令,那么此时检测环境变量Path设置,如果是其它问题(在安装过程中,在使用touch命令时,出现Couldn't reserve space for cygwin's,这种情况可能是缺失某个dll造成的,针对此,直接安装了Cygwin,然后将其中相对应的exe文件和全部的dll都拷贝到yagarto-tool/bin安装目录下即可.这也许是网上介绍需先安装Cygwin的原因.).
3>验证环境
具体步骤如下:
-打开eclipse/File/New/C Project,输入工程名Hello,在Project Type下面选择Makefile Project/Empty Project,右边的Toolchains选择--Other Toolchain--.
如果一切正常,在Hello工程目录下面会生成start.o文件.
_start是默认的入口标签,这个可以在lds脚本中自定义.
.section SECTION_NAME
系统默认的SECTION_NAME有如下:
.text(代码段)
.data(初始化值数据段)
.bss(未初始化数据段)
数据段需要定义在代码段之前.
.global(导出标签)
.extern(导入标签)
.align(对齐)
数据定义
.byte(8bit)
.short(16bit)
.int(32bit)
.flaot(32bit,浮点型)
.ascii(ascii无0结尾字符串)
.string(ascii以0结尾字符串)
.rept NUM(后面定义的内容会重复NUM)
.endr
.space NUM VALUE(保留接下来的NUM空间)
条件判断
.if
.else
.endif
.include
.ifdef
.ifndef
.equ
宏指令
.macro(宏开始)
.endm(宏块结束)
.exitm(跳出宏块)
例子:
.macro MAX_A_B a, b
.if \a > \b
mov r0, \a
.else
mov r0, \b
.end
.exitm
.endm
arm-gnu特有伪指令
.arm(arm32位指令)
.thumb(thumb16位指令)
.itorg(伪指令ldr数据存放池)
对于.data数据段,一般都是作为全局存储区来使用,这样全部程序都可以看的见,一般的在代码段中使用.byte之类伪指令定义的数据则属于私有数据,是一种临时的.
操作码
NOP(空指令)
LDR r0, =0x111111
ADR r0, pre
ADRL r0, last
初始条件
环境建立
arm-gcc汇编简介
初始条件:
tq2440开发板
环境建立:
打算使用eclipse+yagarto的方式建立win下的开发环境.
1.需要下载的工具
eclipse-platform-3.8-win32.zip
http://archive.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/eclipse-platform-3.5-win32.zip
cdt-master-7.0.2.zip
http://ftp.neu.edu.cn/mirrors/eclipse/tools/cdt/releases/helios/dist/cdt-master-7.0.2.zip
yagarto-tools-20100703-setup.exe
http://www.yagarto.de/download/yagarto/yagarto-tools-20100703-setup.exe
yagarto-bu-2.22_gcc-4.7.1-c-c++_nl-1.20.0_gdb-7.4.1_eabi_20120616.exe
http://nchc.dl.sourceforge.net/project/yagarto/YAGARTO%20for%20Windows/20120616/yagarto-bu-2.22_gcc-4.7.1-c-c%2B%2B_nl-1.20.0_gdb-7.4.1_eabi_20120616.exe
2.工具简介
eclipse-platform是一个IDE工具的基础,在其上加上针对特定语言的插件,就可以弄成一个某种语言的IDE.
cdt-master这个就是上面提到的插件.
yagarto-tools这个东西是一个linux下编译基础工具集,其中包括了make,rm等小程序,要使用makefile进行工程管理,则这些小程序是基础.
yagarto-gcc-eabi这个东西则是arm-gcc编译工具集.
3.安装步骤
可以参考yagarto帮助网页http://www.yagarto.de/howto.html.在具体的实现过程中,越过了其中的GDB的东西.一般调试中,习惯的是printf.
1>eclipse及其插件安装
eclipse-platform是绿色软件,直接解压到某个目录下即可.不过eclipse使用java开发的应用程序,需要在本机上安装jre先.
打开eclipse,然后打开Help/Install New Software...,点击Add/Archive添加上面下载的cdt-master,然后将下面的全选即可(也可以按照yagarto网上介绍其中的选项进行).
2>安装yagarto-tool和yagarto-gcc-gabi
分别点击上面exe文件进行一半win程序安装即可.(安装目录中最后全是英文字母.同时安装之后最后重启一下).
打开win的cmd,cd到任意目录下,在其中输入touch --version确认yagarto-tool成功安装,输入arm-none-eabi-gcc --version确认yagarto-gcc-eabi成功安装.
可能会出现的问题是显示找不到这个命令,那么此时检测环境变量Path设置,如果是其它问题(在安装过程中,在使用touch命令时,出现Couldn't reserve space for cygwin's,这种情况可能是缺失某个dll造成的,针对此,直接安装了Cygwin,然后将其中相对应的exe文件和全部的dll都拷贝到yagarto-tool/bin安装目录下即可.这也许是网上介绍需先安装Cygwin的原因.).
3>验证环境
具体步骤如下:
-打开eclipse/File/New/C Project,输入工程名Hello,在Project Type下面选择Makefile Project/Empty Project,右边的Toolchains选择--Other Toolchain--.
-新建start.S文件,代码如下:
.text
.global _start
_start:
ldr r0, =0x56000010 @ GPBCON LED[0:3] Output
mov r1, #0x05500;
str r1, [r0]
adr r0, halt_loop
ldr r0, =0x56000014 @ GPBDAT LED[0:1]-On LED[2:3]-Off
mov r1, #0x0c0
str r1, [r0]
halt_loop:
b halt_loop
-新建makefile文件,代码如下:
# Tools
TGT = arm-none-eabi-
CC = $(TGT)gcc
AS = $(TGT)as
LD = $(TGT)ld
CP = $(TGT)objcopy
all: start.o
start.o: start.S
AS start.S -o start.o
clean:
-rm -f *.0
-选择Project/Build Project.如果一切正常,在Hello工程目录下面会生成start.o文件.
arm-gcc汇编:
gnu的arm汇编同ADS的汇编不同之处主要在于其伪指令.以下重点介绍其伪指令._start是默认的入口标签,这个可以在lds脚本中自定义.
.section SECTION_NAME
系统默认的SECTION_NAME有如下:
.text(代码段)
.data(初始化值数据段)
.bss(未初始化数据段)
数据段需要定义在代码段之前.
.global(导出标签)
.extern(导入标签)
.align(对齐)
数据定义
.byte(8bit)
.short(16bit)
.int(32bit)
.flaot(32bit,浮点型)
.ascii(ascii无0结尾字符串)
.string(ascii以0结尾字符串)
.rept NUM(后面定义的内容会重复NUM)
.endr
.space NUM VALUE(保留接下来的NUM空间)
条件判断
.if
.else
.endif
.include
.ifdef
.ifndef
.equ
宏指令
.macro(宏开始)
.endm(宏块结束)
.exitm(跳出宏块)
例子:
.macro MAX_A_B a, b
.if \a > \b
mov r0, \a
.else
mov r0, \b
.end
.exitm
.endm
arm-gnu特有伪指令
.arm(arm32位指令)
.thumb(thumb16位指令)
.itorg(伪指令ldr数据存放池)
对于.data数据段,一般都是作为全局存储区来使用,这样全部程序都可以看的见,一般的在代码段中使用.byte之类伪指令定义的数据则属于私有数据,是一种临时的.
操作码
NOP(空指令)
LDR r0, =0x111111
ADR r0, pre
ADRL r0, last