知识卡片
装载器运行地址受约束
内容
复制到 RAM 的装载器必须避开运行时堆栈和中断使用区,并按链接器脚本放到可执行的固定地址。发散:在嵌入式里,代码能否运行不只取决于语法正确,还取决于它被链接到哪里。
参考来源
- 位置:《嵌入式系统设计与实践》第7章《更新代码》"7.3.1 将装载器复制到内存"一节(源文件:_epub-src/OEBPS/text00103.html)
- 结论依据:原文明确"我们不能只把装载器复制到运行时代码正在使用的RAM中。如果将装载器放在运行时程序代码(包括中断)使用的RAM中,那么程序就会表现出难以预料的行为并最终崩溃……分配的RAM空间就必须始于特定的基地址……如果解决方案中包含了链接器变量,那么就需要修改运行时链接器脚本"。
- 原始内容:首先,我们不能只把装载器复制到运行时代码正在使用的RAM中。如果将装载器放在运行时程序代码(包括中断)使用的RAM中,那么程序就会表现出难以预料的行为并最终崩溃……另一个问题是构建的装载器程序只能运行于特定的地址(基地址),但是它却调用其他地址的函数……就需要修改运行时链接器脚本以便设置RAM缓冲区的地址,并为装载器程序建立一个空间。