Dear TI colleagues!
在一个例程里,有一个函数用汇编语言定义,并且在另一个C语言的文件中被调用,如: DualFIRCalc_V1(DualFilter);
但是让我不明白是是,这个汇编函数是怎样得到参数DualFilter地址的?
本来在汇编文件中有这样的语句:
;; XAR4+0 => *coeff;
;; XAR4+2 => *data;
但是这些语句却是被注释掉的呀,除了这里外再也找不到其他地方有像似的语句了,所以不明白XAR4寄存器怎么得到参数地址的。
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在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");
struct DUAL_FILTER_PARAMATERS DualFilter;
#ifdef Algorithm2
#pragma DATA_SECTION(DualFilter2, "dual_filter_data");
struct DUAL_FILTER_PARAMATERS DualFilter2;
#endif
void InitDualFilterParameters(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 Algorithm2
DualFilter2.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
}
请问您现在情况如何了?我使用280049 launchpad 测了一下,在CCS内使用反汇编查看,在下面的语句可以看到
ZeroDualFilterData():
00a978: BE00 MOVB XAR6, #0x00
281 uint32_t *data_ptr = &dual_fir_data_i16_i16[0].all;
00a979: 8F00B8C0 MOVL XAR4, #0x00b8c0
283 for(i=0; i < FILTER_LENGTH; i++)
00a97b: 9A00 MOVB AL, #0x0
C$L1:
00a97c: 9C01 ADDB AL, #1
285 *data_ptr++ = 0;
00a97d: C284 MOVL *XAR4++, XAR6
283 for(i=0; i < FILTER_LENGTH; i++)
00a97e: 522A CMPB AL, #0x2a
00a97f: 64FD SB C$L1, LT
289 data_ptr = &dual_fir_data_i16_i16_2[0].all;
00a980: 8F00B840 MOVL XAR4, #0x00b840
290 for(i=0; i < FILTER_LENGTH2; i++)
00a982: 9A00 MOVB AL, #0x0
C$L2:
00a983: 9C01 ADDB AL, #1
292 *data_ptr++ = 0;
00a984: C284 MOVL *XAR4++, XAR6
290 for(i=0; i < FILTER_LENGTH2; i++)
00a985: 522A CMPB AL, #0x2a
00a986: 64FD SB C$L2, LT
00a987: 0006 LRETR
308 DualFilter.coeff = dual_fir_coeff_i16_i16;
InitDualFilterParameters():
00a988: 76C0B1C0 MOVL XAR7, #0x00b1c0
00a98a: 761F02E0 MOVW DP, #0x2e0
316 DualFilter2.coeff = dual_fir_coeff_i16_i16_2;
00a98c: 8F40B240 MOVL XAR5, #0x00b240
309 DualFilter.data = dual_fir_data_i16_i16;
00a98e: 7680B8C0 MOVL XAR6, #0x00b8c0
317 DualFilter2.data = dual_fir_data_i16_i16_2;
00a990: 8F00B840 MOVL XAR4, #0x00b840
308 DualFilter.coeff = dual_fir_coeff_i16_i16;
00a992: C300 MOVL @0x0, XAR7
316 DualFilter2.coeff = dual_fir_coeff_i16_i16_2;
00a993: A00C MOVL @0xc, XAR5
309 DualFilter.data = dual_fir_data_i16_i16;
00a994: C202 MOVL @0x2, XAR6
317 DualFilter2.data = dual_fir_data_i16_i16_2;
00a995: A80E MOVL @0xe, XAR4