This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

關於Devkit8500 要如何從ARM端將Physical Address丟給DSP



如題,我的開發平台為Devkit8500(DM3700)

我的想法是,在ARM端下,先用fopen去讀一個txt檔 然後命名為number_array的矩陣,然後得到number_array的物理位置,並將位置給DSP,讓DSP來去做運算

程式碼如下:

MYFACEDETECTION_Handle hMYFACEDETECTION = NULL;
IMGENC1_Params MYFACEDETECTION_params = MYFACEDETECTION_Params_DEFAULT;
IMGENC1_DynamicParams MYFACEDETECTION_dynParams = MYFACEDETECTION_DynamicParams_DEFAULT;
Engine_Handle hEngine = NULL;
Buffer_Handle hMYFACEDETECTION_InBuf;
Buffer_Handle hMYFACEDETECTION_DstBuf;
Buffer_Attrs myfacedetection_bufAttrs = Buffer_Attrs_DEFAULT;

XDAS_Int8 *inPtr;
XDAS_Int8 *outPtr;

int bufSize;
int j;

int *number_array;
number_array = (int *)malloc(1*sizeof(int));


XDAS_Int8 *buf;
Uint32 physAddr;
int Bufsize_face = 1;


/* Initialize Codec Engine runtime */
CERuntime_init();

/* Initialize Davinci Multimedia Application Interface */
Dmai_init();

/* Open the codec engine */
hEngine = Engine_open(engineName, NULL, NULL);
if (hEngine == NULL) {
       printf("Failed to open codec engine %s\n", engineName);
       exit(-1);
}

/* Create the MYFACEDETECTION encoder */
hMYFACEDETECTION = MYFACEDETECTION_create(hEngine, "myfacedetection", &MYFACEDETECTION_params, &MYFACEDETECTION_dynParams);
if (hMYFACEDETECTION == NULL) {
       printf("Failed to create encoder: %s\n", "MYFACEDETECTION");
       exit(-1);
}


/* Create an input buffer*/
bufSize = 1;
hMYFACEDETECTION_InBuf = Buffer_create(bufSize, &myfacedetection_bufAttrs);
/* Create an output buffer*/
bufSize = 1;
hMYFACEDETECTION_DstBuf = Buffer_create(bufSize, &myfacedetection_bufAttrs);

//number_array的值為 2

FILE *fid;
fid = fopen("number.txt", "r");

for(j = 0 ; j < 1 ; j++)
{
     fscanf(fid, "%d",&number_array[j]);
}
fclose(fid);

/* Allocate a large block of physically contiguous memory for our "alg heap" */
buf = (XDAS_Int8 *)Memory_contigAlloc(Bufsize_face, number_array);

/* Convert virtual address to physical address. */
physAddr = Memory_getBufferPhysicalAddress(buf, Bufsize_face, NULL);

/* Put values into input buffer */
inPtr = Buffer_getUserPtr(hMYFACEDETECTION_InBuf);
inPtr[0] = physAddr;

/* Run MYFACEDETECTION */
if (MYFACEDETECTION_process(hMYFACEDETECTION, hMYFACEDETECTION_InBuf, hMYFACEDETECTION_DstBuf) < 0) {
       printf("Failed to encode video buffer(MYFACEDETECTION)\n");
       exit(-1);
}


/*take out value */
outPt r= Buffer_getUserPtr(hMYFACEDETECTION_DstBuf);
printf("added value is %d\n",outPtr[0]);


free(number_array);

在DSP的部分是 將得到的數值加1

但是得到的結果卻不是為3

想請問是否在程式碼部分有寫錯,還是說有需要額外呼叫的函式,謝謝您。