拓冰建站拓冰建站
首页 / 资讯中心 / 正文

为什么 DCD 分配向量表时,函数地址要加 1(LSB=1)?

难度:★★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。打开任何一个 Cortex-M3 的启动文件,查看向量表,你会看到类似这样的代码:__Vectors DCD __initial_sp ; 0x00000000:栈顶 DCD Reset_Handler ; 0x00000004:复位入口 DCD NMI_Handler ; 0x00000008:NMI入口 DCD HardFault_Handler ; 0x0000000C:HardFault入口第一项__initial_sp是栈顶地址,这个值是多少就是多少,不用改。但后面的函数地址呢?假设Reset_Handler实际位于 Flash 的0x08000100处。向量表里应该填什么?如果你填DCD 0x08000100,程序一跑就 HardFault。正确答案是填0x08000101——这个地址的 LSB(最低位)必须是 1。为什么?这是一个困扰过无数嵌入式工程师的问题。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门