TI中文支持网
TI专业的中文技术问题咨询交流网站

汇编中函数的参数是怎样传递的?

Dear TI colleagues!

在一个例程里,有一个函数用汇编语言定义,并且在另一个C语言的文件中被调用,如: DualFIRCalc_V1(DualFilter);

但是让我不明白是是,这个汇编函数是怎样得到参数DualFilter地址的?

本来在汇编文件中有这样的语句:

;; XAR4+0 => *coeff;
;; XAR4+2 => *data;

但是这些语句却是被注释掉的呀,除了这里外再也找不到其他地方有像似的语句了,所以不明白XAR4寄存器怎么得到参数地址的。

谢谢!

Susan Yang:

请问能否给出具体的例程路径?我们具体看一下,谢谢

另外目前使用的芯片/开发板是什么?

jjl3:

回复 Susan Yang:

已发私信。使用F280049C.
谢谢!

Susan Yang:

回复 jjl3:

好的,我会在确认后给您回复

Susan Yang:

回复 jjl3:

在main.c内可以看到

// Initialize FIR filter Coef & Zero Out Data & Initialize Parameters:

InitDualFilterCoef(); ZeroDualFilterData(); InitDualFilterParameters();

以及

 DualFIRCalc_V1(DualFilter);

而在DualFilter.c内可以看到

#pragma DATA_SECTION(DualFilter, "dual_filter_data");
structDUAL_FILTER_PARAMATERS DualFilter;#ifdef Algorithm2
#pragma DATA_SECTION(DualFilter2, "dual_filter_data");
structDUAL_FILTER_PARAMATERS DualFilter2;
#endifvoidInitDualFilterParameters(void)
{DualFilter.coeff = dual_fir_coeff_i16_i16;DualFilter.data= dual_fir_data_i16_i16;DualFilter.CircPtr.half.index = 0;DualFilter.CircPtr.half.size = (FILTER_LENGTH-1)*2;DualFilter.InFilter1 = 0;DualFilter.InFilter2 = 0;#ifdef Algorithm2DualFilter2.coeff = dual_fir_coeff_i16_i16_2;DualFilter2.data= dual_fir_data_i16_i16_2;DualFilter2.CircPtr.half.index = 0;DualFilter2.CircPtr.half.size = (FILTER_LENGTH2-1)*2;DualFilter2.InFilter1 = 0;DualFilter2.InFilter2 = 0;
#endif
}

jjl3:

回复 Susan Yang:

这些只是给结构体DualFilter赋值,以及把结构体定义在某个section中.
但找不到在哪里把相应的地址赋给了XAR4寄存器呢?

jjl3:

回复 Susan Yang:

目前程序运行正常,只是我想做一些改变, 这才发现好像没有参数地址的传递.
所以这个程序的设计者是先看了前面汇编的结果,直接在后面的汇编中用了这个寄存器?
一般编译器的结果是一样的,但也不排除改动一些程序后,编译器会把地址赋给别的寄存器?
所以保险的做法还是要明确传递一下参数的地址?
谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 汇编中函数的参数是怎样传递的?
分享到: 更多 (0)