STM32启动过程浅析(.map文件)

  • 仿真调试要连接才行(//报错flash下载失败 //和.axf文件)(kill完忘了 报错直接显示没Stlink)
  • 是不是一启动就到main里了 不是

在这里插入图片描述

  • map文件分析代码内存占用有用
    在这里插入图片描述
  • 两个在1 一个在8

文章目录

1.

在这里插入图片描述

  • 这几个都在output里(魔术棒的设置)(编译过程中产生的)
  • .o由那两编译而来
  • .s好像是启动文件
  • .o – .axf – .hex
    在这里插入图片描述

在这里插入图片描述

  • 第二个 编译器会去删除rangyu
  • 给出大小方便优化
    在这里插入图片描述
    在这里插入图片描述
  • 在Listing里

在这里插入图片描述

  • 这个勾上会去除冗余程序段
  • 可以文件里面找到打开 也可以MDK里双击工程名
  • 报错时 生成的可能不完整
    在这里插入图片描述
  • .o由.c来
  • i.什么是入口地址
  • 用处不大
    在这里插入图片描述
  • .c定义 .h声明?

在这里插入图片描述
在这里插入图片描述

  • 加上static后 外部看不见了
    在这里插入图片描述
  • 跑局部里面了(i那个本来就在局部里)
  • 给ms函数加上static就编译报错

在这里插入图片描述

  • 左边地址 大小 类型 只读 最后那个是所在文件?

在这里插入图片描述

  • 重点是这四个
  • 最重要
  • 代码占有量 编译器内容数据? 只读数据 可读可写数据 初始化为0的数据(也是可读可写)
    在这里插入图片描述
  • 左边三项加起来flash
  • 优化只能用户的 编译器的库看不了没法优化

在这里插入图片描述

  • 最后一部分总的

2

在这里插入图片描述

2.1

在这里插入图片描述

  • 为什么差四个? :32位单片机一下取四字节地址(每个地址对应一个字节存储单元(之前不会理解错了吧))
  • 这个复位向量和复位中断有关
    在这里插入图片描述
  • 来确定启动模式
  • 是地址变了
    在这里插入图片描述
  • 模式确定很快
  • 一会改跳帽也没用 可以释放io口
  • 内核还是从0开始 但是st厂商 比如这里F1就从这里
  • 系统存储器里有st的BootLoader程序来下载
  • 内置SRAM是块2的起始地址
  • 前两个最有用 第一个仿真器下载 第二个串口下载
    在这里插入图片描述

在这里插入图片描述

  • 这里指的是那种频率设置出问题导致死机了 可以换个区启动 下载后换回来
  • 第一个用的多

2.2

在这里插入图片描述

  • 复位中断服务函数在启动文件里

在这里插入图片描述

  • 好像有main函数 编译器就会整出来_ _main

在这里插入图片描述

  • 启动文件是.s 是汇编(之前说错了)
  • weak 重新定义 原先的就会失效
  • 主要调用这两函数 S那个可以注释掉 可选(寄存器版本没有这个函数 就去了)
  • 调用_ _main 后 会到main函数
    在这里插入图片描述
  • 寄存器版本没包含这个
    在这里插入图片描述

在这里插入图片描述

  • 这个堆栈就定义在启动文件里?

在这里插入图片描述

  • 中断向量表
  • DCD 关键字 四字节对齐
  • 这里面应该都是函数
  • 定义不在这 这只是说明首地址 方便中断后,内核查找

在这里插入图片描述

  • 这是战舰版HAL库跑马灯实验的(取决于设置?)
  • 这两值可以从Map文件和仿真找到

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值