你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32启动文件详解(1)

[复制链接]
guoyuli 发布时间:2023-9-7 11:09

介绍

启动文件是以.s后缀的汇编编写的,启动文件的作用:

1.初始化推栈指针SP  

2.初初始化PC指针,指向复位程序

3.初始化中断向量表

4.配置系统时钟

5.调用C库函数_main,最终进入c语言编写的代码

一、Stack-栈(使用的是RAM的内存)

作用:用于局部变量、函数调用、函数形参的开销

汇编指令讲解:

EQU:宏定义的伪指令,相当于等于,类似于C语言中的宏定义define

AREA: 告诉汇编器汇编一个新的代码段或者数据段

SPACE:用于分配一定大小的内存空间,单位字节

Stack_Size      EQU     0x00000400

AREA    STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem       SPACE   Stack_Size

__initial_sp

Stack_Size      EQU     0x00000400

Stack_Size 等于 0x00000400(1kb)的空间

AREA    STACK, NOINIT, READWRITE, ALIGN=3

定义栈空间  命名为STACK,NOINIT表示不初始化,READWRITE表示可读可写,ALIGN=3表示2的3次方(8个字节)对齐开辟。

Stack_Mem       SPACE   Stack_Size

分配内存为Stack_Size大小的空间单位字节

__initial_sp

初始化栈指针就是指向栈顶地址(栈使用的时候栈顶先出依次到栈底,先进后出)

标号__initial_sp紧挨着SPACE语句放置,表示栈的结束地址,即栈顶地址,栈是由高向低生长的。

二、Heap-推(使用的是RAM的内存)

作用:用于动态内存的分配,malloc函数

EQU:宏定义的伪指令,相当于等于,类似于C语言中的宏定义define

AREA: 告诉汇编器汇编一个新的代码段或者数据段

SPACE:用于分配一定大小的内存空间,单位字节

Heap_Size       EQU     0x00000400

                        AREA    HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem     SPACE   Heap_Size

__heap_limit

Heap_Size       EQU     0x00000400

Heap_Size 等于 0x00000400(1kb)的空间

AREA    STACK, NOINIT, READWRITE, ALIGN=3

定义栈空间  命名为HEAP,NOINIT表示不初始化,READWRITE表示可读可写,ALIGN=3表示2的3次方(8个字节)对齐开辟。

__heap_base

表示堆的起始地址

Heap_Mem        SPACE   Heap_Size

分配内存为Heap_Size大小的空间单位字节

__heap_limit

初始化推指针

标号__initial_sp紧挨着SPACE语句放置,表示推的结束地址,堆是由低向高生长的(于栈相反)。

                PRESERVE8

                THUMB

PRESERVE8表示指定当前文件的推栈按照8字节对齐

THUMB表示后面指令位THUMB指令


(来源:CSDN  Tree-gg  https://blog.csdn.net/Yuanghxb/article/details/127274317

收藏 评论0 发布时间:2023-9-7 11:09

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版