|
我最近在使用lpc2368片子,在用二分法查找nan flash中历史记录的应用中出现了这样的问题,二分法查找子函数中我定义了个130字节的数组,
程序每次调用这函数2~3次就直接跑到PAbt_Handler B PAbt_Handler。把该数组定义为全局变量后,一切正常,这个该怎么理解!虽然
现在问题解决了,可是......! 目前整个工程RAM占用了23K, 该片中32K ram的。请大侠们帮我分析下!
- ulong Left_check(uchar flag,uchar *key,ulong *low,ulong *high,uchar *outstatus)
- {
- ulong low_addr =0,high_addr =0,mid_addr =0;
- // uchar Tbuf[2][130]; //此处变量一定要定义为全局,为什么??????????????
- ulong mid =0;
- *outstatus=0;
- WDTFeed();
- memset(Tbuf,0,sizeof(Tbuf));
- low_addr = *low%CREC_MAX_NUM;
- high_addr = *high%CREC_MAX_NUM;
-
- mid_addr = (low_addr + high_addr)/2;
-
- if(mid_addr == 0 || low_addr == high_addr)
- return mid_addr;
- mid = mid_addr%CREC_MAX_NUM; //相对位置
-
- if(mid > 0)
- {
- crec_get_zerostart(mid+1,Tbuf[0]);
- crec_get_zerostart(mid,Tbuf[1]);
- if(memcmp(Tbuf[0]+4,"\x83\x00",2)!=0 || memcmp(Tbuf[1]+4,"\x83\x00",2)!=0)
- goto label1;
- time1 = timestr2long(&Tbuf[0][12]);
- time2 = timestr2long(&Tbuf[1][12]);
- time3 = timestr2long(key+1);
- if((time1 > time3 && time2 < time3) || time2 == time3)
- {
- *outstatus = 1;
- *((char *)&mid_addr+LONG_HIGH3)=Tbuf[0][18]; //终端交易流水号
- *((char *)&mid_addr+LONG_HIGH2)=Tbuf[0][19];
- *((char *)&mid_addr+LONG_HIGH1)=Tbuf[0][20];
- *((char *)&mid_addr+LONG_HIGH0)=Tbuf[0][21];
- return mid_addr;
- }
- else if(time1 == time3)
- {
- *outstatus = 1;
- *((char *)&mid_addr+LONG_HIGH3)=Tbuf[0][18]; //终端交易流水号
- *((char *)&mid_addr+LONG_HIGH2)=Tbuf[0][19];
- *((char *)&mid_addr+LONG_HIGH1)=Tbuf[0][20];
- *((char *)&mid_addr+LONG_HIGH0)=Tbuf[0][21];
- return (mid_addr+1);
- }
-
- }
- if(time2 > time3) //左移
- {
- label1:
- *low =low_addr;
- *high =mid_addr;
- return 1;
- }
- else //右移
- {
- *low =mid_addr;
- *high =high_addr;
- return 2;
- }
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|