1.PRESERVE8:
Reguire8和Preserve8
C和汇编有8位对齐的要求,这两个伪指令能够分量此要求,存在REQUIRE8<——> PRESERVE8的对应联系,但不是说有一个REQUIRE8就要有一个 PRESERVE8,如果是一个c文件和一个汇编文件的调用,也就触及一个PRESERVE8或者是一个REQUIRE8.
别的,REQUIRE8和PRESERVE8并不完结8 byte 对齐的操作,对齐由ALIGN完结。
将ADS的代码移植到KEIL MDK上需求做的修正:
当用户具有ADS留传工程的一切源代码时,运用MDK从头编译链接悉数代码是最好的解决方法,MDK中的新版本编译东西会从头生成分量仓库8BYTE对齐要求的方针文件,防止咱们仓库不对齐引起的链接过错.
从ADS到KEIL很重要的一个修正的当地便是这儿的8BYTE对齐,想要编译经过,在startup.s晒干咱们有必要参加PRESERVE8指令,使得寄存器8BYTE对齐.
代码:
CODE32
PRESERVE8 ;这个在KEIL晒干是有必要的,要求8BYTE对齐.在ADS的发动代码中就没有.
AREA vectors,CODE,READONLY
2: ARM的处理器可作业于多种形式,下面设置个形式的一些参数.
Mode_USR EQU 0x10 用户形式
Mode_FIQ EQU 0x11 快间断形式
Mode_IRQ EQU 0x12 间断形式
Mode_SVC EQU 0x13 办理形式
Mode_ABT EQU 0x17 间断形式
Mode_UND EQU 0x1B 未界说形式
Mode_SYS EQU 0x1F 体系形式
参数的由来:这儿各个形式的参数是由寄存器CPSR的形式位设置M[4:0]得来的,比方这儿的用户形式,CPSR的M[4:0]设置为10000便是0x10,同理其他.详见<嵌入式体系基础教程>>P47页,CPSR设置很要害!
3:
I_Bit EQU 0x80 ; when I bit is set, IRQ is disabled
F_Bit EQU 0x40 ; when F bit is set, FIQ is disabled
也和CPSR寄存器的设置有关,这儿两位是制止/舱位快速间断和一般间断的设置.
4: 各形式下界说的仓库地址.
UND_Stack_Size EQU 0x00000000
SVC_Stack_Size EQU 0x00000100
ABT_Stack_Size EQU 0x00000000
FIQ_Stack_Size EQU 0x00000000
IRQ_Stack_Size EQU 0x00000100
USR_Stack_Size EQU 0x00000200
设置仓库巨细
Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size +
FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size)
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
Stack_Top EQU Stack_Mem + Stack_Size
仓库巨细的设置,各公司写的发动代码有所不同,可是不影响全局,能够学习一些你以为比较简单的发动代码,然后写自己的仓库地址和巨细设置程序.
5:堆的设置
Heap_Size EQU 0x00000000
C和汇编有8位对齐的要求,这两个伪指令能够分量此要求,存在REQUIRE8<——> PRESERVE8的对应联系,但不是说有一个REQUIRE8就要有一个 PRESERVE8,如果是一个c文件和一个汇编文件的调用,也就触及一个PRESERVE8或者是一个REQUIRE8.
别的,REQUIRE8和PRESERVE8并不完结8 byte 对齐的操作,对齐由ALIGN完结。
将ADS的代码移植到KEIL MDK上需求做的修正:
当用户具有ADS留传工程的一切源代码时,运用MDK从头编译链接悉数代码是最好的解决方法,MDK中的新版本编译东西会从头生成分量仓库8BYTE对齐要求的方针文件,防止咱们仓库不对齐引起的链接过错.
从ADS到KEIL很重要的一个修正的当地便是这儿的8BYTE对齐,想要编译经过,在startup.s晒干咱们有必要参加PRESERVE8指令,使得寄存器8BYTE对齐.
代码:
CODE32
PRESERVE8
AREA vectors,CODE,READONLY
2: ARM的处理器可作业于多种形式,下面设置个形式的一些参数.
Mode_USR
Mode_FIQ
Mode_IRQ
Mode_SVC
Mode_ABT
Mode_UND
Mode_SYS
参数的由来:这儿各个形式的参数是由寄存器CPSR的形式位设置M[4:0]得来的,比方这儿的用户形式,CPSR的M[4:0]设置为10000便是0x10,同理其他.详见<嵌入式体系基础教程>>P47页,CPSR设置很要害!
3:
I_Bit
F_Bit
也和CPSR寄存器的设置有关,这儿两位是制止/舱位快速间断和一般间断的设置.
4: 各形式下界说的仓库地址.
UND_Stack_Size
SVC_Stack_Size
ABT_Stack_Size
FIQ_Stack_Size
IRQ_Stack_Size
USR_Stack_Size
设置仓库巨细
Stack_Size
Stack_Mem
Stack_Top
仓库巨细的设置,各公司写的发动代码有所不同,可是不影响全局,能够学习一些你以为比较简单的发动代码,然后写自己的仓库地址和巨细设置程序.
5:堆的设置
Heap_Size