难度:★★
本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。
你有没有注意过,启动文件里通常有一行这样的指令:
ENTRY它往往孤零零地出现在最前面,没有操作数,没有修饰符,就那么一行。
很多人的反应是:“既然模板里有,那我留着就是了。”
但你有没有想过:这个 ENTRY 到底在干什么?如果我删掉它会怎样?如果我写了两个呢?
今天我们就来回答这三个问题。答案会顺势揭开链接器确定程序起始地址的完整逻辑。
一、先看现象:删掉 ENTRY 会怎样
拿一个最简单的 Keil 工程做实验。启动文件startup_xxx.s里原本有:
ENTRY AREA RESET, DATA, READONLY __Vectors DCD __initial_sp DCD Reset_Handler ; ...把ENTRY删掉,编译、链接。
程序照样能跑。复位后一切正常。
这就怪了。如果删掉都没事,那它存在的意义是什么?
答案是:<