STM32中断服务向量表通常是在启动文件(通常为汇编文件,如 startup_stm32.s 或 vectors.s)中定义的,它包含了CPU在复位后以及发生中断时需要跳转到的地址,即中断服务函数的入口地址。这个表格在系统启动时会被加载到内存的特定位置,通常是内存的起始地址0x00000000。
而编译后生成的MAP文件是链接器在编译过程中生成的,它提供了关于程序最终内存布局的详细信息,包括各个函数、变量和段的最终内存地址。以下是两者的主要区别:
1. **定义位置和目的不同**:
- **中断服务向量表**:在汇编启动文件中定义,目的是为CPU提供中断发生时应该跳转到的服务函数的地址。这些地址在编译时是固定的,由启动文件指定。
- **MAP文件中的中断服务函数地址**:这些地址是编译器在链接过程中确定的,反映了实际烧录到MCU时函数的物理地址。
2. **地址类型不同**:
- **中断服务向量表**中的地址通常是在汇编层面由程序员直接指定的,或者通过定义来间接指定。
- **MAP文件**中的地址是编译器根据链接命令和内存布局决定的,是编译后的最终结果。
3. **使用阶段不同**:
- **中断服务向量表**在系统启动阶段使用,CPU根据这个表来确定中断服务函数的入口。
- **MAP文件**在开发阶段使用,帮助开发者了解程序的内存布局,确保程序正确加载到目标硬件上。
4. **可变性**:
- 中断服务向量表中的地址一般固定不变,除非修改启动文件。
- MAP文件中的地址在每次编译链接时可能会发生变化,尤其是当项目发生变化或者编译选项改变时。
总之,两者都指向中断服务函数的地址,但前者是在源码级别确定的,后者是编译后确定的物理地址。在实际开发中,确保这两者的一致性是非常重要的,以确保CPU能够正确响应中断。