最近有好些朋友问我关于内存定向分配的问题,恰好我刚用过,方案可行,现将其发出来供大家参考。
以下仅以LPC2292在ADS1.2下的开发为例,说明其分配方法。
STEP1:在startup.s中定义所需要的内存空间的属性。代码如下:
;给外部使用的标号在这声明
EXPORT
DefineData
;需要在头部定义,以便C语言中能够调用
AREA
MYDATA, DATA, NOINIT, ALIGN = 2
;数据类型、数据未初始化、字对齐
DefineData
SPACE
10716
;定义大小
STEP2:在.scf中定义所需数据区域分配的空间。代码如下:
ROM_LOAD 0x2000
{
ROM_EXEC 0x00002000
{
Startup.o (vectors, +First)
* (+RO)
}
DATABLOCK 0x40000100
{
Startup.o(MYDATA)
}
IRAM +0
{
Startup.o (MyStacks)
* (+RW,+ZI)
}
HEAP +0 UNINIT
{
Startup.o (Heap)
}
STACKS 0x40004000 UNINIT
{
Startup.o (Stacks)
}
}
STEP3:在C语言头文件中定义所定义的内存区域。代码如下:
extern volatile uint8 DefineData [10716] ;
这样子,就完成了内存区域的定义,在C语言便可调用数据DefineData了,其数据在内存中的地址为0x40000100,大小为10716。这段数据你可以分配给具体的应用使用了。 |