永发信息网

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); //} } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯