我是 ARM 平台的新手。
下面的代码已在一个函数中使用,用于找出一些复数样本的共轭乘法并将其滑动到一些样本。
此代码在 linux 12.04 版本的 native 编译器中正常工作。在 ARM 中运行相同的代码时,它不会执行该功能。它只是从正在运行的代码中退出。
#include<stdio.h>
int main()
{
float aa[12]={1,1,1,1,1,1,1,1,1,1,1,1};
float *x=aa,*y=x+6,real=0,imag=0;
fn_ComplexMultiply_addthem(x,y,6,&real,&imag);
printf("real value = %f\n",real);
printf("real value = %f\n",imag);
}
void fn_ComplexMultiply_addthem(float *x, float *y, float len, float *re, float *im)
{
int j;
for( j=0; j<len; j+=2)
{
*re += (x[j]*(y[j]));
*re -= (x[j+1]*(-y[j+1]));
*im += (x[j]*(-y[j+1]));
*im += (x[j+1]*(y[j]));
}
}
我无法理解它的原因。每个指针都指向某个值,然后它应该给我任何可能正确的结果。相反,它只是从模拟中退出。
它会与其他一些东西(如堆栈或其他内存)有问题吗?
请帮我调试这个。
最佳答案
程序无效,因为 fn_ComplexMultiply_addthem
在声明之前使用,并且隐式声明与实际定义不匹配。
此外,float len
没有意义。我们不使用浮点数进行计数。
更改len
至int
并在 main
之前添加函数声明:
void fn_ComplexMultiply_addthem(float *x, float *y, int len, float *re, float *im);
总是 启用编译器警告并将它们视为错误(
-Wall -Werror
用于 gcc 和 clang)。
关于compiler-errors - 在移植到 ARM 期间使用指针访问数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194284/