hello,
i'm new to CCS and i am now facing a symbol referencing error as below. i think the linker is not able to link my _decimator function in assembly to my c code. hope someone can help me. thanks
undefined first referenced
symbol in file
--------- ----------------
_decimator c:\users\eempcomp03\desktop\decimation_ktz\decimation\Debug\decimation.obj
>> error: symbol referencing errors - './Debug/decimation.out' not built
Build Complete,
1 Errors, 0 Warnings, 7 Remarks.
****************here's my c code*******************************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#define M 512 //number of samples
#define L 12 //filter length
#define SN L //signal buffer size
extern void _decimator(int*, unsigned int, int*, unsigned int, int*, int*, unsigned int, unsigned int);
#pragma DATA_SECTION(deci_coef,"expdata0:fir");
#pragma DATA_SECTION(deci_coef2,"expdata0:fir");
#pragma DATA_SECTION(x,"expdata1:fir");
#pragma DATA_SECTION(x2,"expdata1:fir");
#pragma DATA_SECTION(index,".bss:fir");
#pragma DATA_SECTION(index2,".bss:fir");
//#pragma DATA_SECTION(out,"output");
#pragma DATA_SECTION(out2,"expdata1:fir");
//#pragma DATA_SECTION(in,"input");
//#pragma CODE_SECTION(main,"fir_code");
#pragma DATA_ALIGN(x, 2); // Use dual MAC, align to 32 bits
#pragma DATA_ALIGN(x2, 2); // Use dual MAC, align to 32 bits
int deci_coef[L];
int deci_coef2[L];
int x[L];
int x2[L];
unsigned int index;
unsigned int index2;
int out[M];
int out2[M];
int in[M];
int inp[M];
int cff[L];
FILE *infile, *incoef;
void main(void)
{ unsigned int i,k;
unsigned int j = 0;
infile = fopen("C:/ti2/examples/FYP2/input.dat", "r");
if (infile == 0)
{printf("could not open input.dat file!\n");}
for (i = 0; fscanf(infile, "%d", &inp[i]) == 1; i++)
{in[i] = inp[i];}
fclose(infile);
incoef = fopen("C:/ti2/examples/FYP2/h0.dat", "r");
if (incoef == 0)
{ printf("could not open h0.dat file!\n"); }
for (k = 0; fscanf(incoef, "%d", &cff[k]) == 1; k++)
{ deci_coef[k] = cff[k]; }
{ deci_coef2[k] = cff[k]; }
fclose(incoef);
//Initialize for filtering process
for (i=0; i<SN; i++)
{ x[i] = 0; }
for (i=0; i<SN; i++)
{ x2[i] = 0; }
index = 0;
index2 = 0;
while (1)
{
for (i=0; i<L; i++)
{ x[i]= in[j++];
if (j== 512)
j=0;}
decimator(in, M, deci_coef, L, out, x, index, 2);
decimator(out, M, deci_coef2, L, out2, x2, index2, 2);
}
}
******************************my linker file****************************************
/* SPECIFY THE SYSTEM MEMORY MAP */
MEMORY
{
MMR : origin = 0000000h, length = 00000c0h
SPRAM : origin = 00000c0h, length = 0000040h
DARAM0 : origin = 0000100h, length = 0003f00h
DARAM1 : origin = 0004000h, length = 0004000h
DARAM2 : origin = 0008000h, length = 0004000h
DARAM3 : origin = 000c000h, length = 0004000h
SARAM0 : origin = 0010000h, length = 0004000h
SARAM1 : origin = 0014000h, length = 0006000h
SARAM2 : origin = 001a000h, length = 0002000h
SARAM3 : origin = 001c000h, length = 0004000h
SARAM4 : origin = 0020000h, length = 0004000h
SARAM5 : origin = 0024000h, length = 0004000h
SARAM6 : origin = 0028000h, length = 0004000h
SARAM7 : origin = 002c000h, length = 0004000h
SARAM8 : origin = 0030000h, length = 0004000h
SARAM9 : origin = 0034000h, length = 0004000h
SARAM10 : origin = 0038000h, length = 0004000h
SARAM11 : origin = 003c000h, length = 0004000h
SARAM12 : origin = 0040000h, length = 0004000h
SARAM13 : origin = 0044000h, length = 0004000h
SARAM14 : origin = 0048000h, length = 0004000h
SARAM15 : origin = 004c000h, length = 0004000h
VECS : origin = 0ffff00h, length = 00100h /*reset vector*/
}
/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */
SECTIONS
{
vectors : {} > VECS /*interrupt vector table*/
.cinit : {} > SARAM0
.text : {} > SARAM1
.stack : {} > DARAM0
.sysstack : {} > DARAM0
.sysmem : {} > DARAM1
.data : {} > DARAM1
.bss : {} > DARAM1
.const : {} > DARAM1
fir_coef : {} > SARAM0 /*user defined sections*/
fir_data : {} > DARAM2
input : {} > SARAM0
output : {} > SARAM0 align 0x4 /*boundary alignment*/
fir_code : {} > SARAM1
isrs : {} > SARAM2
}