- 仿真调试要连接才行(//报错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文件和仿真找到