- 注册时间
- 2005-2-11
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2007-6-16 18:56:08
|
显示全部楼层
新增加了几个编译命令,以下是帮助->语法->预处理命令中的内容:
*#loaddata,初始化内存。格式是:
格式1:#loaddata 全局变量或数字=数字或字符串;
如:
int a;
char s[20];
#loaddata a=-3;
#loaddata s="Hello World!";
#loaddata 0x4000=1;//用数字做地址时(比如这里的0x4000,赋值的数字(比如这里的1)不能超过255)
格式2:#loaddata 全局变量或数字={数字或字符串,数字或字符串,.....};
如:
int s[20];
#loaddata s={-1,2000,30,50,6000};
#loaddata 0x4000={1,2,3,6};//用数字做地址时(比如这里的0x4000,赋值的数字(比如这里的1)不能超过255)
char r[10][10];
#loaddata r={"TC800","NC3000","PC2000"};
格式3:#loaddata 全局变量或数字=load(路径,数字1,数字2);这里的数字1表示文件的起点,数字2表示读取的长度。其中数字1和数字2可以缺省。
如:
char pic[1600];
#loaddata pic=load("/LavaData/pic.dat");//会将pic.dat的所有内容载入到pic所指的内存中,缺省了数字1和数字2。
#loaddata pic=load("/d.dat",16);//会将pic.dat偏移16字节后的所有内容载入到pic所指的内存中,缺省了数字2。
#loaddata pic=load("/d.dat",16,10);//会将pic.dat偏移16字节后的10字节内容载入到pic所指的内存中。
#loaddata 0x4000=load("/b.dat");
使用该命令可以使内存充分利用和加快编译速度。可以用于载入图片等。
*注意:
1.该命令可以出现在程序的任何地方。
2.只能初始化全局变量或数字,对局部变量使用该命令会报错。也不能这样写:
int s[10];
#loaddata s[0]=1;
#loaddata s+1={1,2,3};
以上两种格式都是错误的。
*#code:功能是直接写入虚拟代码。格式是:#code{~};。如:
#code{0x00};
#code{10,20,30,20};
#code{"Hello World!"};
#code{"sdf",1,3,4};
code后一定要跟上一对大括号和分号,里面是要写入的虚拟代码,以逗号隔开。该命令再一定程度上扩展了编译器的功能。要实现编译器无法实现的功能时,可以试试这个命令。这种格式有点象变量初始化。
*#start:设置变量空间地址。编译器在编译程序时,会为每个变量分配一个地址,对变量的操作其实是对地址的操作。众所周知,LavaX的变量空间地址是从0x2000开始的,然后向上生长。用户不能将某个变量与一个地址关联。该命令可以轻易实现这个功能,而不用其他操作(如通过指针等)实现。格式是:#start 数字。如:
#start 0x19c0
char screenbuf[1600];
int a=2;
char b;
......
编译器编译时,会将screenbuf关联到0x19c0上,而a则关联到0x19c0+1600上,依此类推。该命令可以用于需要比较特殊的内存的地址。比如系统定义的特殊内存或io口等。注意该命令容易引起无法跨平台,请适当使用。最好将该命令放在函数外部。
*#unstart:返回当前地址空间。该命令配合#start使用,必须与#start成对出现,并且不能嵌套使用!编译器在遇到#start命令时,会将当前地址空间备份起来并切换到新的地址空间中。当定义完变量后需要恢复到当前空间中,可以使用#unstart命令,该命令会将备份恢复到当前地址空间,实现切换功能。格式是#unstart。如:
#start 0x6
char screenlight;
#unstart
int a=1;
定义在#start与#unstart命令内的变量和全局变量一样可以在定义时初始化。最好将该命令放在函数外部。
#skip:跳过地址空间。因为相邻的变量的地址是相邻的,如:
int a;
long b;
假如变量a的地址是0x2000,那么变量b的地址是0x2002(因为变量a占用2个字节的空间)。
有时不需要连续的地址,则可以使用#skip跳过该地址而不与任何变量关联。格式是:#skip 数字。如:
int a;
#skip 0x10
long b;
假如变量a的地址是0x2000,那么变量b的地址是0x2002+0x10了。 |
|