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.
工具/软件:Code Composer Studio
我正在尝试在我正在使用的 F28m36x 电路板上实现 FFT。 我已将2837x_vcu0_rfft_512示例用作模板。 我认为电路板上的 vcu0单元配置正确。 编译后、我查看了存储器、并看到 vcu0_CFFT_utils.asm 和 vcu0_CFFT_256.asm 中定义的函数被写入存储器。 我从 rfft_512_data.asm 中获取了示例输入、并将 FFT 输入指针指向数据、然后运行代码以查看来自 FFT 的输出是否与预期输出相匹配。 当我查看反汇编时、我看到函数标签被加载到工作寄存器中、但我在反汇编窗口中看不到函数的汇编代码。 我继续单步执行代码、看到工作缓冲区中填充了新数据、但在完成代码后、我查看了输入缓冲区的内容、数据没有发生变化。 它认为、如果点数是偶数、汇编函数应该写回输入缓冲器、在这种情况下是偶数。 我有点被骗了
cfft16_t FFT = rfft16_512P_DEFAULTS;
ComplexShort FFT_Work_buffer[256];
void rfft16 (cfft16_t * FFT_HND);
void main (void){
FFT.ipcbptr =(int *) RFFT16_512p_in_data + 0;
FFT.workptr =(int *) FFT_work_buffer + 0;
fft.init(&fft);
rfft16(&FFT);
int k;
int s、t、v;
对于(k = 0;<DATA_LENGTH; k++){ 为0.8MHz
if (abs (RFFT16_512p_out_data[k]- RFFT16_512p_in_data[k])> Epsilon){
S = RFFT16_512p_OUT_DATA[k];
t = RFFT16_512p_in_data[k];
V =绝对(s-t);
FAIL++;
}
否则{
pass ++;
}
}
在迭代 for 循环后、我有512个失败。 FFT 结构和函数包含在 DSP 库 v2_10_00_00/include/vcu0下的 vc0_FFT.h/vcu_types.h 文件中
您好,Sira,
因此、我能够弄清楚如何单步执行汇编并查看汇编代码。 问题现在似乎与 vcu0_CFFT_utils.asm 中的函数_cfft16_flip_re_img 中的这一部分代码有关
RPTB FLIP_LOOP、AR1
MOV AH、*+ XAR2[0];
MOV AL、*+ XAR2[1];
MOVL *XAR2++,ACC
我可以在寄存器中看到加载到累加器中的存储器的正确值、但在存储步骤中、存储器似乎没有变化。
例如:
@0x0013250A 0xFA60
@0x0013250B 0xF876
AH:0xFA60、AL:0xF876、XAR2: 0x0013250A
写回 XAR2时、内容不会改变。 我不确定问题是什么。
谢谢、
Josh
您好,Sira,
很抱歉、我不断向您提出问题、但我对拆卸窗口很好奇。 部分代码如下所示:
1293c5: 761F002B MOVW DP、#0x2b
1293c7: 4A2F TBIT @0x2F、#0xA
1293c8: 6C07 SB C$L18、NTC
1293c9: 482F TBIT @0x2F、#0x8
1293ca: 6D03 SB C$L17、TC
1293cb: 492F TBIT @0x2F、#0x9
1293cc: 6C03 SB C$L18、NTC
417 返回(0);
它的其他部分看起来是什么样的
1293d2: FE02 ADD2 SP、#2
140 MOVL *-SP[2]、XAR4
1293d3: A842 MOVL *-SP[2]、XAR4
141 LCR _rfft_F32_Stages1和2和3以及位反向
1293d4: 765293DB LCR $C:/ti/controlSUITE/libs/dsp/FPU/v131/source/C28x_FPU_LIB/RFFT_f32.asm:192:356$
142 MOVL XAR4、*-SP[2]
1293d6: 8A42 MOVL XAR4、*- SP[2]
143 LCR _rfft_F32_Stages4和 Up
1293d7: 76529447 LCR C:/ti/controlSUITE/libs/dsp/FPU/v131/source/C28x_FPU_LIB/RFFT_f32.asm:363:590$
144 SubB SP、#2
1293d9: FE82 SubB SP、#2
145 LRETR
1293da: 0006 LRETR
192 按 XAR1
我可以看到它们是指汇编文件中的行。 区别是否源于.asm 文件中的汇编与通过 C 代码生成的汇编?
此外、函数的一些标签作为目录路径编写、而其他标签则是基本标签。 这是我很难出错的原因吗?
例如:
0x1293DB:$C:/ti/controlSUITE/libs/dsp/FPU/v131/source/C28x_FPU_LIB/RFFT_f32.asm:192:356$、rfft_F32_Stages1and2and3and BitReverse
0x12943A:rfft_32_last
两个函数都写入同一个文件中、因此它们的显示方式不同看起来很奇怪。
谢谢、
Josh
约书亚、
您是否能够在不进行任何修改的情况下从 C2000Ware 中成功运行 TI 提供的2833x_RFFT 示例项目? 这将是第一步。
然后、我们可以讨论您的项目中正在发生的情况。 您的项目2833x_RFFT 项目有何区别? 我假设您的项目是您想要实现 FFT 功能的特定应用、并且您正在引入2833x_RFFT 项目中的各个部分?
在您的项目中需要检查的内容包括链接器命令文件、项目中链接到的库(请参阅下图)、要包含的头文件(math.h)、并注意构建后生成的任何警告。
您好!
因此、我最终测试这些函数是否正常工作、我创建了一个名为 float sinf_new (void)/cosf_new 的新函数、并从在 s_cosf.c 和 s_ssinf.c 中定义的 sinf ()/cosf ()复制到代码上、然后运行我的代码。 它似乎在工作。 因此、我看到的是、当我运行原始代码时、我被带到函数内部、但函数背景呈灰色显示、我之前看到的是我没有定义预处理器符号的情况。
#if __TI_has_F32_hardware &&!__TI_has_F64_hardware 包含在函数定义上方。 我应该将其放置在预定义符号中吗?
现在、我删除了所有2833x_RFFT 代码、并将其替换为2837x_RFFT 代码、我将每次插入一个代码段、以查看在何处发生任何错误、同时使用 sin 和 cos 函数的重新定义。
谢谢
Josh
您好,Sira,
因此、我从 C28x 端的 ADC_SoC f28m36x 项目和 ARM 端的 UART 项目开始。 我能够正确实现我希望实现的功能。 这时、我开始尝试从控制套件中提供的示例移植 FFT 算法。 现在、我让 FPU 工作、并且在调用 sin cos 函数后正确填充 FFT 数组。 我认为我的链接器设置正确、因为我运行了我拥有的内容、并查看了程序在反汇编和存储器查看器中的执行方式。 我现在看到的唯一问题是调用 sinf.c 和 cosf.c 中的 sin 和 cos 定义两个函数的整个块都是灰色的、因此我认为这意味着在编译期间不会包含这些函数、因为当我从#ifdef FPU32 &&!FPU64块中删除代码时会执行代码。 我认为它是预处理器符号问题的原因是、当我添加 USE_TABTIONS 语句时、我看到该标签下灰显的代码段变为白色。
谢谢、
Josh
您好,Sira,
我终于能够让项目运行了。 我唯一剩下的问题是对犯罪和余弦的调用。 正如我之前说过的、我必须定义一个新函数来实现 cos 和 sin 函数。 当我将语句 __TI_HAS_F32_hardware &&添加到预定义的符号中时,编译器会告诉我,我有一个错误,该错误指出没有源代码,它没有任何作用。 但除此之外、其他一切都很完美。
谢谢、
Josh
您好,Sira,
感谢您的回答。 在返回项目之前、我需要做一些工作。 当我获得机会时、我会尝试实时运行它、并让您知道发生了什么。
谢谢、
Josh
您好,Sira,
Code Composer 中是否有用于测量 FFT 执行时间的工具?
谢谢、
Josh
您好,Sira,
我的问题已经解决,只想感谢所有的帮助。
谢谢、
Josh