打印

兆易创新 GD32 系列(一) 启动过程分析

[复制链接]
679|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qsrg51|  楼主 | 2023-10-28 01:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
起始和STM32的启动过程是一样的

EQU:给数字常量取一个符号名,相当于C语言中的define
AREA:指示汇编程序汇编新的代码或数据段。
SPACE:分配内存空间
PRESERVE8:当前文件堆栈需按照8字节对齐
EXPORT:声明一个标号具有全局属性,可被外部的文件使用
DCD:以字为单位分配内存,要求4字节对齐,并要求初始化这些内存
PROC:定义子程序,与ENDP成对使用,表示子程序结束
MSR:Move to Special register from Register. 恢复到特殊寄存器
WEAK:弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,如果外部文件没有定义也不出错。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。
IMPORT:声明标号来自外部文件,跟C语言中的EXTERN关键字类似
B:跳转到一个标号ALIGN编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即数,缺省表示4字节对齐。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。
END:到达文件的末尾,文件结束
IF,ELSE,ENDIF:汇编条件分支语句,跟C语言的if else类似

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


使用特权

评论回复
沙发
qsrg51|  楼主 | 2023-10-28 01:54 | 只看该作者
EQU 类似C语言的define
Stack_Size EQU 0x800,表示Stack_Size 为0x00000400

AREA STACK, NOINIT, READWRITE, ALIGN=3

使用特权

评论回复
板凳
qsrg51|  楼主 | 2023-10-28 01:55 | 只看该作者
用AREA指令定义一个段,代码节或数据节。说明所定义段的相关属性。(说明段的名字,段的属性)
NOINIT 不初始化
READWRITE 可读写
ALIGN=3 按照8*2^3 =64字节对齐

Stack_Mem SPACE Stack_Size

使用特权

评论回复
地板
qsrg51|  楼主 | 2023-10-28 01:55 | 只看该作者
Stack_Mem 分配内存空间大小为 0x00000400
__initial_sp 表示Stack_Mem 空间的结束地址。栈顶地址,栈是由高向低生长的
Heap_Size       EQU     0x00000400

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

395

帖子

2

粉丝