Board logo

标题: 汇编和C混合编程 急!急!急! [打印本页]

作者: markie    时间: 2006-8-14 21:06     标题: 汇编和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文件引用。


急!急!急!


作者: seuafu2005    时间: 2006-8-15 09:56

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

或者直接参考这个帖子

http://bbs.chinaecnet.com/dispbbs.asp?boardID=3&RootID=101651&ID=101651
作者: markie    时间: 2006-8-16 10:18

汇编和C之间的变量相互调用我是会的,可是在C中定义的变量,如果使用了extern申明,汇编就无法调用了,好像是编译时候没有将用extern申明过的变量首先定义出来,即在相应的*.o文件中没有这个变量,所以汇编即使用XREF也无法调用。

作者: strongchen    时间: 2006-8-16 10:35

把你的PROJECT贴上来看看。
作者: markie    时间: 2006-8-16 14:38

/* 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未被定义。
怎么办?
作者: strongchen    时间: 2006-8-16 16:35

i必须在某一个文件里定义,而在别的文件里作为外部变量。你这样定义要么都成了外部变量,要么多次定义,当然有问题。
作者: strongchen    时间: 2006-8-16 17:56

实际上,如果你不愿意在程序文件里定义变量,你可以单独写一个.C文件用于定义变量,如:
/* file3.c */
int i;

把此文件加入你的PROJECT即可。

作者: markie    时间: 2006-8-18 08:39

我把i放在file1.c中定义,如:
/* file1.c */
int i;
问题解决了,谢谢!看来是C没学好!

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






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0