打印

C和汇编混编问题

[复制链接]
1987|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

粉丝