|
由于数据量比较大,我在片外zone2扩展了一个256kb的ram,用于存储ad采样的数据,单个地址读写还算正常,但是当像一个连续数组内写数据时发生了比较奇怪的现象,我的程序是这样写的
#pragma DATA_SECTION(SampleTablei, \".ext_data1\" ;
#pragma DATA_SECTION(SampleTableq, \".ext_data2\" ;
Uint16 SampleTablei[BUF_SIZE];
Uint16 SampleTableq[BUF_SIZE];
for(i=0;i<BUF_SIZE;i++)
{
SampleTablei=i;
}
当BUF_SIZE小于512时,查看memory,存放SampleTablei的区域内的数据为0到BUF_SIZE,这个区域内结果正常,但是接写来的三个连续的512bytes的区域内也是从0到BUF_SIZE;
当BUF_SIZE大于512时,存放SampleTablei的区域内存放的数据就不一定,有时候可能是从0开始连续一段然后突然跳到别的数上,也可能从512开始,总之数据不正常。
我的cmd文件如下:
/
MEMORY
{
PAGE 0 :
RAMM0 : origin = 0x000000, length = 0x000400
BEGIN : origin = 0x3F8000, length = 0x000002
PRAMH0 : origin = 0x3F8002, length = 0x000FFE
RESET : origin = 0x3FFFC0, length = 0x000002
PAGE 1 :
RAMM1 : origin = 0x000400, length = 0x000400
RAML0L1 : origin = 0x008000, length = 0x002000
ZONE21 : origin = 0x0a0000, length = 0x020000
ZONE22 : origin = 0x080000, length = 0x020000
DRAMH0 : origin = 0x3f9000, length = 0x001000
}
SECTIONS
{
codestart : > BEGIN, PAGE = 0
ramfuncs : > PRAMH0 PAGE = 0
.text : > PRAMH0, PAGE = 0
.cinit : > PRAMH0, PAGE = 0
.pinit : > PRAMH0, PAGE = 0
.switch : > RAMM0, PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
.stack : > RAMM1, PAGE = 1
.ebss : > DRAMH0, PAGE = 1
.econst : > DRAMH0, PAGE = 1
.esysmem : > DRAMH0, PAGE = 1
.ext_data1 : > ZONE21, PAGE = 1
.ext_data2 : > ZONE22, PAGE = 1
}
|
|