首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

汇编和C混合编程 急!急!急!

汇编和C混合编程 急!急!急!

我们的项目由几部分组成,包括了HCS12汇编和c代码。


工程中包括两个c文件(file1.c和file2.c)和一个asm文件(file.asm),其中file1.c中定义了变量int i。现在希望变量i能够被全部三个文件中的函数使用。


file2.c利用include语句包含file1.c;file.asm中利用XREF也可以引用变量i。


现在的问题是编译的时候出错,提示i被file1.c和file2.c重复定义。将i定义为extern型的,倒是不会重复定义了,可是XREF却无法引用,好像i在编译的时候就没有被定义,所以提示file.asm中使用的i未被定义。


我该如何设置,才能使得在c中定义的变量,可以同时被其他c和asm文件引用。


急!急!急!

置顶帖,常见问题列表中有这个问题的回答

或者直接参考这个帖子

http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=101651&ID=101651
汇编和C之间的变量相互调用我是会的,可是在C中定义的变量,如果使用了extern申明,汇编就无法调用了,好像是编译时候没有将用extern申明过的变量首先定义出来,即在相应的*.o文件中没有这个变量,所以汇编即使用XREF也无法调用。
把你的PROJECT贴上来看看。
海纳百川  有容乃大
/* file1.h */
extern int i;

/* file1.c */
include "file1.h"
void file1()
{
i = 0;
}

/* file2.c */
include "file1.h"
void file2()
{
i = 1;
}

/* file.asm */
XREF i

LDD #0
STD i

如果不加extern,则会提示i被file1.c和file2.c重复定义;如果使用extern,则提示file.asm中的i未被定义。
怎么办?
i必须在某一个文件里定义,而在别的文件里作为外部变量。你这样定义要么都成了外部变量,要么多次定义,当然有问题。
海纳百川  有容乃大
实际上,如果你不愿意在程序文件里定义变量,你可以单独写一个.C文件用于定义变量,如:
/* file3.c */
int i;

把此文件加入你的PROJECT即可。
海纳百川  有容乃大
我把i放在file1.c中定义,如:
/* file1.c */
int i;
问题解决了,谢谢!看来是C没学好!

[此贴子已经被作者于2006-8-18 8:39:23编辑过]

返回列表