- 注册时间
- 2005-1-23
- 最后登录
- 1970-1-1
|
其实早就研究出来了,可是考虑到~~可能不太稳定,最近测试了一下处理少量的数组还算速度~
#define _DEBUG 1
#define K_UP 20
#define K_DOWN 21
#define K_RIGHT 22
#define K_LEFT 23
#define K_ENTER 13
#define K_ESC 27
#define K_PAGEUP 19
#define K_PAGEDOWN 14
#define K_DEBUG 'd'
#define DYNAMIC_RAM_LEN 16384 //可以自己改,这值是我的引擎中设定的
char dynamic_ram[DYNAMIC_RAM_LEN];
int dynamic_len;
void hex(char c,int adr)
{
int _a,_b;
_a=c/16;
_b=c%16;
if(_a<10) _a=_a+48; else _a=_a+87;
if(_b<10) _b=_b+48; else _b=_b+87;
*adr=_a;*(adr+1)=_b;
}
void _debug()
{
char s[5];
long base;
char _c;
int _y,_x;
memset(s,0,5);
base=0x2000;
SetScreen(1);
for(;;)
{
for(_y=0;_y<6;_y++)
{
for(_x=0;_x<8;_x++)
{
hex(*(base+_y*8+_x),_TEXT+_x*2+_y*26);
*(_TEXT+_x+16+_y*26)=*(base+_y*8+_x);
}
}
UpdateLCD(0);
_c=getchar();
if(_c==K_UP) base=base-8;
if(_c==K_DOWN) base=base+8;
if(_c==K_LEFT) base=base-48;
if(_c==K_RIGHT) base=base+48;
if(_c==K_PAGEDOWN) base=base+256;
if(_c==K_PAGEUP) base=base-256;
if(_c=='i') base=base-4096;
if(_c=='k') base=base+4096;
if(_c==32) {hex(base/256,s);hex(base%256,s+2);TextOut(4,4,s,0x40);Box(3,4,28,14,0,1); getchar();}
}
}
void error(int e,int class,int reason)
{
SetScreen(1);
printf("引擎出错:\n错误:%s\n 种类:%s\n原因:%s\n热键退出!",e,class,reason);
for(;;)
{
if(getchar()==K_DEBUG&&_DEBUG==1) _debug();
}
}
/********/
void w_int(int p,int v)
{
if(p<0x19c0||p>0x7fff) error("写数据错误","非法地址","程序bug或资源文件错误");
*(p+1)=(v&0xff00)>>8;
*(p)=(v&0x00ff);
}
int _int(int p)
{
return (*(p+1)<<8)|*(p);
}
void new(int p,int len)
{
if(dynamic_len+len+4>DYNAMIC_RAM_LEN) error("动态分配内存","内存不足","程序规划错误或资源文件参数错误");
w_int(p,dynamic_len+dynamic_ram+4);
w_int(dynamic_len+dynamic_ram,p);
w_int(dynamic_len+dynamic_ram+2,len);
dynamic_len=dynamic_len+len+4;
}
void delete(int p)
{
int len;
int i;
if(_int(p)==0) return;
if(_int(p)<dynamic_ram||_int(p)>=dynamic_ram+DYNAMIC_RAM_LEN) error("动态删除内存","指针范围出错","程序规划错误.");
if(_int(_int(p)-4)!=p) error("动态删除内存","指针校验出错","程序归划错误");
len=_int(_int(p)-2);
i=_int(p)-4;
i=i+_int(i+2)+4;
while(i!=dynamic_len+dynamic_ram)
{
w_int(_int(i),_int(_int(i))-4-len);
i=i+_int(i+2)+4;
}
memcpy(_int(p)-4,_int(p)+len,DYNAMIC_RAM_LEN-_int(p)-len);
dynamic_len=dynamic_len-len-4;
w_int(p,0);
}
/********/
使用是需要先将指针定义为全局变量或是main中的变量
使用new的方法:new(&指针,数组长度);
这时指针会指像分配好的内存地址上
使用delete的方法:delete(&指针);
这时会删除指针所值的内存地址并将指针的值改为0,但不清0数据区的数据
delete删除未事先定义的指针时会报错!
|
|