Cortex-M3:为什么启动文件中要写 REQUIRE8 和 PRESERVE8?

发布时间:2026/7/29 14:49:35

Cortex-M3:为什么启动文件中要写 REQUIRE8 和 PRESERVE8? 难度:★★★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。打开任何一个规范的 Cortex-M3 启动文件,你大概率会在开头附近看到这两行:REQUIRE8 PRESERVE8它们不产生任何机器码,不影响向量表,不参与初始化流程。很多工程师的做法是:反正模板里有,抄过来放着,能编译就行。但当你有一天写了一个带printf的工程,程序突然 HardFault。你调试了三天三夜,发现崩溃点在一个vprintf的LDRD指令上。再深挖,发现栈指针的 bit[2] 是 1——栈没有 8 字节对齐。这时候你才意识到,那两行被你忽略的指令,原来是埋了三年的一颗雷的引信。今天这篇文章,就来拆解REQUIRE8和PRESERVE8到底在干什么,以及为什么它们和printf的生死直接挂钩。一、先看现象:什么时候会出事?写一个测试程序:

相关新闻