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.

请教一下关于AM3358协处理器NEON的问题

Other Parts Discussed in Thread: AM3358

各位大牛,我想在AM3358的片内SRAM上运行我的程序,通过CMD 文件将.data,.text,.bss,.const.cinit.stack 都搬移到片内SRAM然后单步运行程序,在运行到 MMUConfigAndEnable();时跑飞了,排查问题,发现 MMUConfigAndEnable()中有一个MMUEnable();函数,里面的有一个CP15MMUEnable();涉及到打开协处理器NEON,程序就是在这里出了错误,提示的问题是:

No source for available for "AbortHandler() at D:\Workplace\MyProject\cons_hello\Debug\cons_hello.out{3}",  AbortHandler()是在exceptionhandler.asm中的异常处理,请问有没有大神能够帮忙解决啊,协处理器NEON是否会和片内SRAM发生冲突啊,因为同样的程序我放在片外DDR中就可以运行,或者片内运行的时候注销掉CP15MMUEnable()也能运行,就是慢点。

运行的函数如下:

int main(void)
{

int IterationNum=1000;

for(i=0;i<RowA;i++)

{
for(j=0;j<ColumnA;j++)
{
if((i<RowA/2)&&(j<ColumnA/2))
{
MatrixA[i][j]=1.5;
}
else if((i>=RowA/2)&&(j<ColumnA/2))
{
MatrixA[i][j]=2.7;
}
else if((i<RowA/2)&&(j>=ColumnA/2))
{
MatrixA[i][j]=6.3;
}
else
{
MatrixA[i][j]=5.5;
}
}
}
for(i=0;i<RowB;i++)
{
for(j=0;j<ColumnB;j++)
{
if((i<RowB/2)&&(j<ColumnB/2))
{
MatrixB[i][j]=3.8;
}
else if((i>=RowB/2)&&(j<ColumnB/2))
{
MatrixB[i][j]=4.9;
}
else if((i<RowB/2)&&(j>=ColumnB/2))
{
MatrixB[i][j]=1.8;
}
else
{
MatrixB[i][j]=7.1;
}
}
}
for(i=0;i<RowC;i++)
{
for(j=0;j<ColumnC;j++)
{
MatrixC[i][j]=0;
}
}

/* Setup the MMU and do necessary MMU configurations. */
MMUConfigAndEnable();
/* Enable all levels of CACHE. */
CacheEnable(CACHE_ALL);
while(IterationNum)
{

for(i=0;i<RowA;i++)
{
for(j=0;j<ColumnB;j++)
{
for(k=0;k<ColumnA;k++)
{
MatrixC[i][j]+=MatrixA[i][k]*MatrixB[k][j];

}

}
}

IterationNum--;
}

}

我的CMD文件如下:

-stack 0x4000 /* SOFTWARE STACK SIZE */
-heap 0x2000 /* HEAP AREA SIZE */
-e Entry
/* Since we used 'Entry' as the entry-point symbol the compiler issues a */
/* warning (#10063-D: entry-point symbol other than "_c_int00" specified: */
/* "Entry"). The CCS Version (5.1.0.08000) stops building from command */
/* line when there is a warning. So this warning is suppressed with the */
/* below flag. */

--diag_suppress=10063

/* SPECIFY THE SYSTEM MEMORY MAP */

MEMORY
{
DDR_MEM : org = 0x80000000 len = 0x7FFFFFF /* RAM */
IRAM_MEM : org = 0x402F0400 len = 0xFC00 /* RAM */
}

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */

SECTIONS
{
.text:Entry : load > IRAM_MEM
.text: load > IRAM_MEM

.data : load > IRAM_MEM /* INITIALIZED GLOBAL AND STATIC VARIABLES */
.bss : load > IRAM_MEM /* UNINITIALIZED OR ZERO INITIALIZED */
/* GLOBAL & STATIC VARIABLES */
RUN_START(bss_start)
RUN_END(bss_end)
.const : load > IRAM_MEM /* GLOBAL CONSTANTS */
.cinit : load >IRAM_MEM
.stack : load > IRAM_MEM /* SOFTWARE SYSTEM STACK */

}

错误现象如下: