DSP较大的二维数组数据的存取
答案:2 悬赏:80 手机版
解决时间 2021-03-14 23:56
- 提问者网友:动次大次蹦擦擦
- 2021-03-14 05:55
最近做DSP的一个项目,板子是基于TMS320F28335的开发板,采集ADC数据(12位精度),同时需要具备时间分辨率(1ms),因此我需要开最大[10000][1024]的二维数组来存数据,问题是这么大的数组应该怎样开出来,并进行处理,还有芯片片上包括外扩存取器都存不下这么大数据(但是有SD卡),数据处理实时性要求很高,采集完就需要上传,求问该如何处理
最佳答案
- 五星知识达人网友:思契十里
- 2021-03-14 06:20
不能边处理边放入吗?按你这个有十几兆,一下子处理十几兆的数据,F28335 150M的频率也够呛吧,基本一条指令周期是6.667ns,看你的处理过程复杂程度。。。越复杂越不容易实现。
全部回答
- 1楼网友:洒脱疯子
- 2021-03-14 07:19
这个问题 我可以非常明确地告诉你,c#无法直接调用这种参数的函数,c#中你描述的那种二维数组,本质上跟一维数组一致。倒是single[][]跟float**是类似的,但是也不能直接传递。
然后具体说说
float* arr arr为指向float型的指针
single[] arr arr为single型数组的引用,当传递给api时,会自动传递内部指针,这个指针才真真的指向single型的指针
float** arr arr为一个指向float型指针的指针,即arr[]应该是一个float型指针
single[][] arr arr为一个single型数组引用的数组引用,这意味着arr的内部指针指向的是single[]型引用的指针,跟指向single型指针完全是两码事
综上所述,c#不能直接调用test(float** arr,int rows,int cols),你必须使用非安全代码构造一个single*[],然后将这个数组传递过去。下面是一个例子
[dllimport("test.dll")]
static extern unsafe bool test(float*[] arr, int row, int col);//这里arr要声明为float*[],使用起来比较方便
bool calltest(float[,] arr)
{
int row = arr.getupperbound(0) + 1;
int col = arr.getupperbound(1) + 1;
unsafe
{
fixed(float* fp=arr)
{
float*[] farr=new float*[row];
for (int i = 0; i < row;i++ )
{
farr[i] = fp + i * col;
}
return test(farr, row, col);
//如果test(float** arr, int row, int col)这样声明,就要用下面的方法调用
//fixed(float** fpp=farr)
//{
// return test(fpp, row, col);
//}
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯