问题描述:(使用平台MPLAB8.3,编译器C30,使用芯片DSPIC30F2010)
1、有两个工程文件Project1和Project2(一个板子里面使用了两个独立的30F2010芯片,程序也基本相同),两个工程文件放在两个文件夹X和Y内,X和Y文件夹都保存在文件夹Z内。
2、在Project1里面有定义了一个全局变量RunningStatus,在Project2也同样定义了一个全局变量RunningStatus,但是两个变量在RAM里面存储的地址不同(假设一个是0x0809,一个是0x0815)。
3、两个工程文件Project1和Project2都一个内容相同的汇编文件(ttt.S文件),汇编文件用到了全局变量RunningStatus(在汇编里面用_RunningStatus引用)。
4、先编译Project1,结果正常编译成功。在编译Project2时就出现了 Link Error: Cannot access symbol (_RunningStatus) at an odd address. 当我把Project2全局变量RunningStatus的存储地址改为和Project1的一样时编译就正常通过。
我的理解:
在编译Project2链接ttt.S文件时_RunningStatus变量的地址还是使用了在Project1编译时产生的地址。
我的问题:
两个不同的工程文件,所以编译的文件名都不同,存储在不同文件夹内(虽然内容相同),为什么在编译汇编链接地址会使用同一个地址呢?
我的汇编文件的一部分:
.text
.global _RAMCheck
_RAMCheck:
...........
..........
..........
mov #0xe9 , w2
mov w2 , _RunningStatus
_end:
return
.end |