BIN文件编译完成后只能放在一个地址上运行吗?

2019-07-21 03:35发布

我用UCOS来加载执行bin文件,因为堆栈和中断沿用uCOS任务的设置值,故不需要重新设置bin文件的堆栈和中断地址。目前已经运行起来了,相当于uCOS的一个任务。但我不理解为何该bin文件一定要在指定位置才能正常运行,我把它加载到偏移源地址1024位置处运行时失败。难道说文件中函数和指令地址都是绝对地址而不是偏移地址么?还是什么原因?请教大家!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
pofeng110
1楼-- · 2019-07-21 03:55
我要做的其实是在不停止bin文件运行的情况下更新它,具体思路是在另外的区域加载新文件,然后在适当时候切换过去执行(切换时间要求比较严格),这样就要求bin文件在两个区域都可以执行。大家有没有什么好办法?
jinfeng
2楼-- · 2019-07-21 04:13
1. 地址是由linker根据链接脚本(IAR中叫.ICF文件,RVMD中叫scatter文件)确定的
2. 现有程序只会在指定地址处取指令。

有一种方法是将BIN地址存储在Flash中,每次执行BIN的时候根据Flash里面的地址执行。
pofeng110
3楼-- · 2019-07-21 08:14
 精彩回答 2  元偷偷看……
styleno1
4楼-- · 2019-07-21 10:17
单片机架构决定它很多时候使用的物理地址,因而以固定空间作为加载区,以此基地址编译。

一周热门 更多>