;**
;* @brief    数据段
;*
 AREA    StackSpace, DATA                 ; 数据段定义栈空间StackSpace

STM32_MspBot    SPACE    256          ; 从栈底开始开辟256字节作为栈空间 
STM32_MspTop                                    ; 空间到栈顶结束


下面文章讲的比较清晰的传统方式供对比参考:

1.写在前面

首先,你要知道STM32启动文件中启动流程,你就需要掌握一点汇编基础知识

汇编语言属于机器语言,或者说低级语言,C语言属于高级语言,所以,汇编和C语言在语法上差异很大。

如果你学底层开发,汇编的一些基础知识需要掌握。不需要精通,但需要看懂常见的汇编代码

2.说明

STM32的启动文件与编译器有关,不同编译器,它的启动文件不同。

虽然启动文件(汇编)代码各有不同,但它们原理类似,都属于汇编程序。

我们拿基于MDK-ARM的启动文件来举例,说一下要点内容

3.分配堆栈

在基于MDK的启动文件开始,有一段汇编代码是分配堆栈大小的。

这里重点知道堆栈数值大小就行。还有一段AREA(区域),表示分配一段堆栈数据段。

数值大小可以自己修改,也可以使用STM32CubeMX数值大小配置:

在IAR中,是通过工程配置堆栈大小:

4.向量表

相信大家都知道向量表,先看汇编代码:

这个向量表就是对应手册中的那些内容:

我们需要知道这个地方中的复位,程序上电之后,是跳到Reset_Handler这个位置。

5.执行代码

上面知道代码是从Reset_Handler开始执行,我们看Reset_Handler汇编代码:

在启动的时候,执行了SystemInit这个函数。

之前标准外设库在SystemInit这个函数初始化了系统时钟,后面HAL库单独把那部分代码提出来了。

执行完SystemInit函数,就跳转到我们的main函数执行了。

(4) XOS 源码详解: os_s_xxxx.s 汇编代码的 堆栈空间定义,比较简洁的方式相关推荐

  1. XOS 源码详解3: os_s_xxxx.s 汇编代码的 LDR指令

    ; PendSV_Handler PendSV_Handler         LDR        R2,    =OSTcbCurr                    ; 不必关中断.嵌套中断 ...

  2. XOS 源码详解2: os_s_xxxx.s 汇编代码的段定义AREA,程序入口ENTRY,程序结尾END.

    代码段定义 EXPORT    __Vectors ;** ;* @brief    中断向量 ;*         AREA    Vectors, CODE ; 系统异常 __Vectors 数据 ...

  3. 【Live555】live555源码详解(九):ServerMediaSession、ServerMediaSubsession、live555MediaServer

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: ServerMediaSession.ServerMediaSubsession.Dy ...

  4. 【Live555】live555源码详解系列笔记

    [Live555]liveMedia下载.配置.编译.安装.基本概念 [Live555]live555源码详解(一):BasicUsageEnvironment.UsageEnvironment [L ...

  5. 【Live555】live555源码详解(八):testRTSPClient

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的testRTSPClient实现的三个类所在的位置: ourRTSPClient.StreamClient ...

  6. 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: GenericMediaServer.RTSPServer.RTSPClient 14 ...

  7. 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: FramedSource.RTPSource.RTPSink 11.FramedSou ...

  8. 【Live555】live555源码详解(五):MediaSource、MediaSink、MediaSession、MediaSubsession

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的四个类所在的位置: MediaSource.MediaSink.MediaSession.MediaSub ...

  9. 【Live555】live555源码详解(四):Medium媒体基础类

    [Live555]live555源码详解系列笔记 7.Media Medai所依赖关系图 依赖Medai关系图 Media和UsageEnvironment关联图

最新文章

  1. MySQL 5.7.10 免安装配置
  2. htmlplay前端编辑器下载_2019年最好用的代码编辑器推荐
  3. C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题
  4. java反射代码,java反射
  5. C#:判断数组中有没有某个值的方法
  6. 如何让Win10在开机时跳过锁屏
  7. 用scanf函数输入数据,字符数据的输入输出
  8. SSM面试题,2021最新Java面试题及答案
  9. c语言基础--ASCII码表
  10. cai鸟驿站管理系统
  11. USB转RS232串口应用
  12. 无法登陆skype显示无法找到服务器,无法登录 Lync,因为找不到此登录地址 - Skype for Business | Microsoft Docs...
  13. 百度 bos php,百度BOS云存储上传插件 - 支持客户端直传、服务端中转、分片上传 – 基于ThinkPHP和Bootstrap的极速后台开发框架...
  14. discuzq 去除页面版权
  15. poi实现多线程大数据导出
  16. Android 开源1:获取并解析网页信息(Jsoup)
  17. 天池竞赛赛题-特征工程-天猫用户重复购买预测解析
  18. 大数据技术闲侃之岗位选择解惑
  19. java-生产环境不重启 JVM,替换掉已经加载的类
  20. 青龙面板之滴滴果园撸水果(2022.6.21更新库)

热门文章

  1. 失业状态,整理一下近期的面试问题 -- 直面自我
  2. 使用gulp将文件转码至utf-8格式
  3. 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结
  4. 《团对-学生成绩管理-开发环境搭建过程》
  5. windows下配置nginx+php环境
  6. Unity3d开发IOS游戏 基础
  7. 再看到一则有关Anders的……
  8. [教程]添加yueue.ADOKeycap数据库组件到您的项目
  9. CSS中的类class和标识id选择符(.和#号)
  10. centos虚拟机安装,配置静态ip可以访问网络