内存布局与地址
内存布局
这里的ROM在实际中是MCU里的FLASH,RAM是SRAM


堆区是手动分配的,要手动释放
地址分配
对于Cortex-M4内核的单片机,上电复位后执行的第一项关键操作,就是从向量表偏移寄存器(VTOR)所指向的地址处获取中断向量表。VTOR默认值为0,因此内核会首先跳转到0x00000000地址。然而,该地址通常并未实际映射物理存储器,而是通过片内重映射机制,被链接到Flash的起始地址0x08000000。所以,CPU实质上是跳转到了0x08000000处开始执行。
在这个起始地址,存放的正是中断向量表。内核从中读取两项关键内容:
- 主堆栈指针(MSP)的初始值;
- 复位函数(Reset_Handler)的入口地址。
随后,内核跳转至复位函数,该函数会在完成系统时钟、存储器等必要的初始化工作后,最终跳转到main()函数,进入用户应用程序。
值得注意的是,这个中断向量表通常由汇编启动文件定义。若固件烧录位置并非0x08000000,复位后CPU依然会从默认的0x08000000处取向量。如果该地址没有有效的向量表(或没有烧录固件),CPU将无法正确获取SP与PC初始值,进而导致程序跑飞或进入HardFault。
因此,Cortex-M4的启动起始地址实质上固定为0x08000000。若要支持多应用分区或在线升级(OTA)等功能,则需在0x08000000处固化一个Bootloader程序,由Bootloader在启动后根据外部标志或通信协议,再跳转至用户应用程序的起始地址。

1.启动时单片机是从0地址开始的,这里的0是根据BOOT引脚映射到FLASH或者其他放程序的地方的
2.核内外设区(Cortex-M Core Peripherals)
- 地址范围: 0xE000 0000 - 0xFFFF FFFF
- 功能: 管理 CPU 内核的心跳和中断。
- 详细解释: 这里的寄存器是 ARM 公司 设计的,跟 ST(意法半导体)没关系。
- 举例:****SysTick(滴答定时器):你代码里 HAL_Delay 依赖的计时器就住在这里。NVIC(中断控制器):管理所有外设中断的优先级和使能。Debug 通讯 (ITM/SWD):你在线调试时数据是怎么回传的,也归这里的地址管。
寄存器映射
给很多寄存器起的别名


指针基础
对一切变量的修改都是CPU通过总线访问内存地址,修改地址对应的值
指针是个变量,变量就有对应的地址,指针变量比较特殊,它地址对应的的值是地址类型的
指针指向的值的是地址类型
指针对数据的操作为2种:
1.对指针指向的地址对应的值进行操作(取值*)
2.修改指针指向的地址(直接赋值 p=address)
p->a =1;是p对指向的地址区域 里面的变量a的地址 对应的值 赋1,也就是a=1;

