2016-10-27 4 views
0

Я пытаюсь запустить следующий код для реализации БПФ в процессоре DSP, модель которого упомянута выше. Код написан на C LANGAUGEОшибка при запуске кода в TMS320C6713 DSK?

//All codes submitted by Srivatsa Sinha 
/*Include Library Files*/ 
#include <stdio.h> 
#include<math.h> 

/*Templates*/ 
//#define ll long long 
#define cmp struct complex 
#define print_cmp(z) printf("%lf + %lfj\n",z.re,z.im) 
#define M_PI 3.14159265358979 

struct complex 
{ 
    float re; 
    float im; 
}res,w,w_var,t,u; 

cmp signal[4]; 
cmp result[4]; 
int j,s,k,n,z,x,no_of_bit,rev,pow2[10],m,a; 
void calc() 
{ 
    pow2[0]=1; 
    for(k=1; k<10; k++) { pow2[k] = pow2[k-1]*2;} 
} 

cmp add(cmp a, cmp b) 
{ 
    res.re = a.re + b.re; 
    res.im = a.im + b.im; 
    return res; 
} 

cmp sub(cmp a, cmp b) 
{ 
    res.re = a.re - b.re; 
    res.im = a.im - b.im; 
    return res; 
} 

cmp mul(cmp a, cmp b) 
{ 
    res.re = a.re*b.re - a.im*b.im; 
    res.im = a.re*b.im + a.im*b.re; 
    return res; 
} 

cmp cmp_pow(cmp base, int exp) 
{ 
    res.re = 1.0; res.im = 0.0; 
    for(a=1; a<=exp; a++) 
     res = mul(res,base); 
    return res; 
} 

void bit_rev() 
{ 
    no_of_bit = log2(n); 
    for(z=0; z<n; z++) 
    { 
     rev = 0; 
     for(x=0; x<no_of_bit; x++) 
     { 
     if((z>>x)&1) 
     { 
      rev = rev|(1<<(no_of_bit-1-x)); 
     } 
     } 
     result[rev] = signal[z]; 
    } 
} 

void fft() 
{ 
    bit_rev(); 
    for(s=1; s<=(int)log2(n); s++) 
    { 
    m = pow2[s]; 
    w.re = (float)cos(((float)2.0*(float)M_PI)/(float)m); w.im = (float)-1.0*sin(((float)2.0*(float)M_PI)/(float)m); 
    for(k=0; k<n; k+=m) 
    { 
     w_var.re = 1; w_var.im = 0; 
     for(j=0; j<=(m/2 - 1); j++) 
     { 
     t = mul(w_var, result[k+j+(int)(m/2)]); 
     u = result[k+j]; 
     result[k+j] = add(u,t); 
     result[k+j+(int)(m/2)] = sub(u,t); 
     w_var = mul(w_var, w); 
     } 
    } 

    } 
} 

void dft() 
{ 
    w.re = (float)cos(((float)2.0*(float)M_PI)/(float)n); w.im = (float)-1.0*sin(((float)2.0*(float)M_PI)/(float)n); 
    for(k=0; k<n; k++) 
    { 
     result[k].re = 0.0; result[k].im = 0.0; 
     for(j=0; j<n; j++) 
     { 
      result[k] = add(result[k],mul(signal[j],cmp_pow(w,k*j))); 
     } 
    } 
} 

int main() 
{ 
    calc(); 
    printf("Enter length of the signal: "); 
    scanf("%d",&n); 
    printf("Enter the signal sequence: \n"); 
    for(k=0;k<n; k++) 
    { 
     scanf("%f",&signal[k].re); 
     scanf("%f",&signal[k].im); 
    } 
    fft(); 
    printf("The Result of FFT is: \n"); 
    for(k=0; k<n; k++) 
    { 
    print_cmp(result[k]); 
    } 
    dft(); 
    printf("The Result of DFT is: \n"); 
    for(k=0; k<n; k++) 
    { 
    print_cmp(result[k]); 
    } 
    return 0; 
} 

следующие файлы добавлены до компиляции:

hello.cmd The Linker file 
rts6700.lib The Library file 

Хотя код успешно компилируется, но при встраивании дает следующие ошибки:

can't allocate .stack size 00000400 (page 0) in IRAM (avail: 000003ec) 
can't allocate .sysmem size 00000400 (page 0) in IRAM (avail: 000003ec) 
can't allocate .cio size 00000120 (page 0) in IRAM (avail: 0000010a) 
errors in input - ./Debug/FFTa.out not built 

Пожалуйста Помогите??

+1

Прежде чем включать этот rts6700.lib, сделал простой «hello.cmd» для вашего целевого DSP? –

+0

У вас заканчивается IRAM. Либо измените конфигурацию памяти, чтобы увеличить IRAM, либо переместите эти разделы на другие части, такие как SDRAM или другие. – user3528438

+0

Можете ли вы объяснить мне термины IRAM и SDRAM, и как мы передаем порции в SDRAM ?. Я - младший и довольно новый для DSP-процессоров, и поэтому не осознает. Его код, который я пишу в качестве части моего ежедневного эксперимента, используя технологии в колледжах –

ответ

0

Благодарим вас за воспоминания. Прошло пару лет с тех пор, как я работал с инструментами TI. У меня больше нет доступа к их документации, но похоже, что вам нужно установить файл управления компоновщиком. Если вы используете CodeComposer, вам нужно будет создать цель (или обозначить имитационную модель), которая будет определять, где находятся ваши места в RAM. Если вам нужно получить высокую производительность от процессора, вам нужно будет копаться в различных типах памяти, чтобы минимизировать задержки в шинах.

Смежные вопросы