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

XGATE中断服务程序问题

XGATE中断服务程序问题

大家好!

我有一个中断服务程序,如下:

void interrupt Crank_ISR(void)
{
Crank_Signal=Get_Capture_Time(TPU_IN_RLOC_1);
}

其中Get_Capture_Time(TPU_IN_RLOC_1)是一个API函数。

这个中断服务程序在S12XCPU下是可以正常运行的,但在XGATE下就会出现Link错误:

Link Error : L1822: Symbol __X_Get_Capture_Time in file D:\Project\My-CW\S12x_ECU\S12x_ECU_Data\TBDML\ObjectCode\xgate.cxgate.o is undefined
Link Error : Link failed

(但是,如果把Get_Capture_Time函数的内容拷到XGATE中断服务程序中,又是可以正常运行的。)

上述Link错误是什么原因啊?.....请大家帮帮忙!谢谢!

还有,Crank_Signal是一个32位变量。

论坛中有一帖“XGATE中能处理32bit的数据吗?”好像跟我的问题是一个性质的,但就是不知道什么原因。

我在建立工程的时候,对于XGATE选择的是“All float and double variables are 32bit/IEEE32 for the XGATE.” 内存模式是“Banked”

但我感觉,问题不在变量上,而是在调用API函数上。因为下面的中断处理是可以的

void interrupt Crank_ISR(void)
{

if(TFLG2_TOF == 1)
{
read = TCNT; // Read to clear the TOF flag
Crank_Signal=(65536 + TC2 - TC2H);
}
else
Crank_Signal=(TC2 - TC2H);
}

求助了......

[此贴子已经被作者于2008-8-28 17:13:27编辑过]

Freescale的S12X是一个双核处理器,两个核是S12XCPU和XGATE. IDE(如Freescale的CodeWarrior)有两个编译器分别对S12XCPU和XGATE的代码进行编译。在您的第一种情况下,函数Get_Capture_Time()放在 *.c的源文件中,系统将其编译为S12XCPU的指令,XGATE当然不能执行,故Link时报错。
在第二中情况下,函数Get_Capture_Time()的代码放在*.cxgate的源文件中,故系统将其编译为XGATE的指令,XGATE就可以调用了。在此情况下,s12xcpu就不能调用该函数了。如果你想让两个核都能使用,那必须在*.C核*.cxgate的文件中都要有该函数的代码。
注意:1)S12XCPU和XGATE的指令集完全不同;2)系统IDE根据源文件的扩展名(*.c / *.cxgate)来选择相应的编译器。

希望解答了您的问题。

谢谢楼上的!

但是,我的意思并不是让两个核同时调用函数Get_Capture_Time(),我是分开调试的;首先,让s12xcpu处理中断,调用函数Get_Capture_Time(),运行正常;接下来把这部分中断任务让XGATE来做,就出现连接错误了!

帮忙啊...

已经解释过了,请再仔细阅读上面的贴子。

1)在您的第一种情况下,函数Get_Capture_Time()放在 *.c的源文件中,系统将其编译为S12XCPU的指令,XGATE当然不能执行,故Link时报错。

2)必须要将函数Get_Capture_Time()放在 *.cxgate的源文件中,系统才会将其编译为XGATE的指令,XGATE才能调用。

谢谢!谢谢!

问题是解决了!在建立API函数的时候,就要将函数Get_Capture_Time()放在 *.cxgate的文件中

[em04]
返回列表