例4 定义非自动清零的数据段
SEGMENTS ……
RAM = READ_WRITE DATA_NEAR TO 0x2FFF;
RAM_NO_INIT = NO_INIT DATA_NEAR TO 0x3FFF; …… END
PLACEMENT ……
DATA_PERSISTENT INTO RAM_NO_INIT; …… END
0x2000 0x3000
//源程序编写:
#pragma DATA_SEG DATA_PERSISTENT //定义复位时非自定清零数据段 byte sysState;
#pragma DATA_SEG DEFAULT
4 堆栈的设置
关于堆栈的设置,Codewarrior提供了两种方式:“STACKSIZE”命令方式和“STACKTOP”命令方式。这两种方式在同一个.prm文件中,不能同时存在。当用户只关心堆栈的大小而不关心堆栈的存放位置时,推荐使用STACKSIZE方式。
系统默认的方式为使用STACKSIZE方式。
STACKSIZE命令方式:
当使用STACKSIZE命令方式时,如果在PLACEMENT-END部分声明了“SSTACK INTO RAM”,这样的话,堆栈区就被放在RAM区域的起始部分,下面的例子说明了这种方式: 例5 SEGMENTS ……
RAM = READ_WRITE DATA_NEAR 0x2000 TO x3FFF; …… END
PLACEMENT ……
SSTACK, PAGED_RAM, DEFAULT_RAM INTO RAM; ……
0END
STACKSIZE 0x100
上面的例子将堆栈区域存放的地址为0x20FF-0x2000,初始的堆栈指针指向栈顶地址0x20FF。
相反,如果在PLACEMENT-END部分没有声明
“SSTACK INTO RAM”,则堆栈被分配在RAM区域中已分配空间的后面。请参见例6。 例6 SEGMENTS …… RAM =
READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF; …… END
相关推荐: