
介绍 启动文件是以.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) |
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
有奖直播 | STM32MP2x 资源隔离架构 (RIF) 介绍与使用
白皮书下载|边缘 AI 变革:MCU集成 NPU 的破局与领航
OpenSTLinux:为STM32 MPU生态系统带来超强助力
【STM32MP257】轻松搭建A35 Linux编译及调试环境
【STM32MP257】🥳STM32MP257-DK-开发板开箱体验
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习心得