C和汇编混编问题

[复制链接]
2917|1
 楼主| hziee30 发表于 2012-4-13 10:32 | 显示全部楼层 |阅读模式
问题描述:(使用平台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
xlhtracy 发表于 2013-4-16 15:20 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部