ARM 单片机启动流程

前言:


在做项目的过程中,可能会遇到死机的问题,因此作为一名嵌入式工程师我们需要了解单片机的启动流程这对于我们解决程序中的问题有非常大的帮助。


1.0 单片机启动文件

SystemInit这个文件里做了时钟的初始化,_main函数内部包含一系列的函数和使用流程,包括调用自己的main函数。

2.0 _mian函数执行流程

3.0 中断向量表

单片机硬件架构

CPU 通过地址访问这些片上外设


4.0 CODE区域


5.0 ARM单片机启动模式

ARM单片机可以从main flash启动,bootloader启动用来执行ISP功能,也可以从片上内存启动,也可以使用管脚配置不同的高低电平启动,从main flash、bootoader、启动用得比较多


6.0 启动流程


7.0 中断软件结构

写代码编译以后生成的是hex文件实际上烧写到flash部分的是bin文件,bin文件可以在keil中手动的添加自己需要执行的命令bin文件。


8.0 栈的使用

栈空间

_main函数也是一个函数(内部包含变量参数所以会给_main函数分配内存空间) 起始地址对应的是栈顶地址对于我们的这函数而言对应的就是0x20000428,栈的特点:栈的空间是循环利用重复利用起来的,用于节省内存空间,使用函数的方式替代全局变量可以减少内存的消耗。栈的大小是可以人为的设定的。

栈空间大小的定义(大小的分配),在函数的内部有没有定义大数组,在函数的内部尽量不要定义大数组,同时在结构体中,结构体的参数是定义为普通类型还是指针类型,那么我们尽量使用指针的方式减少栈空间的占用,一个指针变量本身所占用的内存空间是4个字节,我们写的发吗有没有出现太多的嵌套层级,如果嵌套层级太多,也会占用大量的栈空间,因此在编写程序的过程中不要出现太多的函数嵌套。

栈顶地址是如何得来的:是计算得来的,全局变量多少占用多少的内存等,通过这些占用字节的大小计算出来。


9.0 FLASH 空间布局


后记:

为后面远程升级和ICP的方式做铺垫。

相关推荐
FreakStudio10 分钟前
WIZnet-EVB-Pico2开始,用MicroPython玩转以太网开发
python·单片机·嵌入式·大学生·面向对象·技术栈·并行计算·电子diy·电子计算机
LCG元1 小时前
STM32实战:基于STM32F103的工业仪表数据采集(多路ADC)
stm32·单片机·嵌入式硬件
BT-BOX1 小时前
Stm32CubeMX+Proteus仿真--STM32外部中断
stm32·单片机·proteus
瑶池酒剑仙1 小时前
C++类和对象完全指南:从封装继承多态到内存布局的面向对象宝典(雨夜论道)
c语言·开发语言·c++·visual studio
三品吉他手会点灯2 小时前
C语言学习笔记 - 27.C编程预备计算机专业知识 - 什么是字节
c语言·开发语言·笔记·学习
森利威尔电子-3 小时前
森利威尔SL8700 降压型大功率 LED 恒流驱动器:5A/95%效率,支持 PWM/模拟调光
单片机·嵌入式硬件·集成电路·芯片·电源芯片
三佛科技-187366133973 小时前
GP8892SEH贴片SOP7省外围5V2A隔离型原边反馈芯片直接替代MT3723
单片机·嵌入式硬件
Quinn273 小时前
正点原子 STM32MP257 修复异核 FreeRTOS 例程 osDelay() 函数比 HAL_Delay() 延时快的问题
stm32·单片机·嵌入式硬件
周周记笔记3 小时前
【元器件专题】三极管性能
单片机·嵌入式硬件
邪修king5 小时前
C++ 继承超全详解:核心语法、作用域、默认函数、菱形继承与避坑指南
c语言·c++