打印

程序空间的问题

[复制链接]
2123|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen3bing|  楼主 | 2012-2-15 13:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一个程序,优化代码,精简程序空间。
是两个触摸屏键值判断程序,其中y值一样。
程序如下:
void Calculator_key(void)
{
     if((X>=87)&&(X<=126)&&(Y>=KEY04YL)&&(Y<=KEY04YH))  //0
      keycode=13;
  else if((X>=140)&&(X<=173)&&(Y>=KEY04YL)&&(Y<=KEY04YH))               //1
      keycode=14;
  else if((X>=184)&&(X<=224)&&(Y>=KEY04YL)&&(Y<=KEY04YH))  //2
      keycode=15;
  else if((X>=239)&&(X<=280)&&(Y>=KEY04YL)&&(Y<=KEY04YH))    //3
      keycode=16;         
  else if((X>=290)&&(X<=335)&&(Y>=KEY04YL)&&(Y<=KEY04YH))      //4
      keycode=17;
  else if((X>=87)&&(X<=126)&&(Y>=KEY59YL)&&(Y<=KEY59YH))  //5
      keycode=18;
  else if((X>=140)&&(X<=173)&&(Y>=KEY59YL)&&(Y<=KEY59YH))    //6
      keycode=19;
  else if((X>=184)&&(X<=224)&&(Y>=KEY59YL)&&(Y<=KEY59YH))     //7
   keycode=20;
  else if((X>=239)&&(X<=280)&&(Y>=KEY59YL)&&(Y<=KEY59YH))   //8
      keycode=21;
  else if((X>=290)&&(X<=335)&&(Y>=KEY59YL)&&(Y<=KEY59YH))   //9
      keycode=22;
  else if((X>=87)&&(X<=159)&&(Y>=KEYCOKYL)&&(Y<=KEYCOKYH))   //C
      keycode=24;
  else if((X>=173)&&(X<=236)&&(Y>=KEYCOKYL)&&(Y<=KEYCOKYH))    //.
      keycode=23;
  else if((X>=266)&&(X<=335)&&(Y>=KEYCOKYL)&&(Y<=KEYCOKYH))    //OK
      keycode=26;
  else
   keycode=0xff;
}

相关帖子

沙发
chen3bing|  楼主 | 2012-2-15 13:43 | 只看该作者
另外一个与这个差不多,只是x值不一样、
我定义了两个数组,如下:
code uint speed_x[14]=
{
        87,126,140,173,184,224,239,280,290,335,159,173,236,266       
};
code uint dose_x[14]=
{
        154,196,206,250,258,298,306,346,352,398,236,242,310,320       
};
原子程序改为
void Calculator_key(uint *q)
{
            if((X>=*q)&&(X<=(*(q+1)))&&(Y>=KEY04YL)&&(Y<=KEY04YH))                //0
                    keycode=13;
                else if((X>=(*(q+2)))&&(X<=(*(q+3)))&&(Y>=KEY04YL)&&(Y<=KEY04YH))                      //1
                    keycode=14;
                else if((X>=(*(q+4)))&&(X<=(*(q+5)))&&(Y>=KEY04YL)&&(Y<=KEY04YH))                //2
                    keycode=15;
                else if((X>=(*(q+6)))&&(X<=(*(q+7)))&&(Y>=KEY04YL)&&(Y<=KEY04YH))           //3
                    keycode=16;                                                  
                else if((X>=(*(q+8)))&&(X<=(*(q+9)))&&(Y>=KEY04YL)&&(Y<=KEY04YH))             //4
                    keycode=17;
                else if((X>=*q)&&(X<=(*(q+1)))&&(Y>=KEY59YL)&&(Y<=KEY59YH))                //5
                    keycode=18;       
                else if((X>=(*(q+2)))&&(X<=(*(q+3)))&&(Y>=KEY59YL)&&(Y<=KEY59YH))           //6
                    keycode=19;
                else if((X>=(*(q+4)))&&(X<=(*(q+5)))&&(Y>=KEY59YL)&&(Y<=KEY59YH))                                 //7
                        keycode=20;
                else if((X>=(*(q+6)))&&(X<=(*(q+7)))&&(Y>=KEY59YL)&&(Y<=KEY59YH))                        //8
                    keycode=21;
                else if((X>=(*(q+8)))&&(X<=(*(q+9)))&&(Y>=KEY59YL)&&(Y<=KEY59YH))                 //9
                    keycode=22;
                else if((X>=*q)&&(X<=(*(q+10)))&&(Y>=KEYCOKYL)&&(Y<=KEYCOKYH))                 //C
                    keycode=24;
                else if((X>=(*(q+11)))&&(X<=(*(q+12)))&&(Y>=KEYCOKYL)&&(Y<=KEYCOKYH))           //.
                    keycode=23;
                else if((X>=(*(q+13)))&&(X<=(*(q+9)))&&(Y>=KEYCOKYL)&&(Y<=KEYCOKYH))           //OK
                    keycode=26;
                else
                 keycode=0xff;
}
调用时如下:
Calculator_key(speed_x);
。。。。。。。。。。。。。。。。。。。
Calculator_key(dose_x);

使用特权

评论回复
板凳
chen3bing|  楼主 | 2012-2-15 13:53 | 只看该作者
这样可以减少300来个字节。
我还不满足,又把数组重新定义,
xdata uint speed_x[14]=
{
        87,126,140,173,184,224,239,280,290,335,159,173,236,266       
};
xdata uint dose_x[14]=
{
        154,196,206,205,258,298,306,346,352,398,236,242,310,320       
};
我原想这样把数组定义在数据空间,会使数据剩余空间减小,而使程序空间占用量减少。
谁知试下来,数据空间变小了,程序空间又多占用了几个字节。
我糊涂了,请高手赐教,怎么回事?谢谢!

使用特权

评论回复
地板
chen3bing|  楼主 | 2012-2-15 14:14 | 只看该作者
高手支招啊!

使用特权

评论回复
5
chen3bing|  楼主 | 2012-2-15 16:37 | 只看该作者
没人知道吗?

使用特权

评论回复
6
chen3bing|  楼主 | 2012-2-15 20:06 | 只看该作者
怎么没人理呀?高手都上哪里去了?

使用特权

评论回复
7
chen3bing|  楼主 | 2012-2-16 08:01 | 只看该作者
我郁闷了,没人遇到这种问题吗?

使用特权

评论回复
8
jianghuoo00| | 2012-2-16 08:57 | 只看该作者
帮你顶一下

使用特权

评论回复
9
q331513266| | 2012-2-16 09:10 | 只看该作者
你这是叫观众干编译器的活;P

使用特权

评论回复
10
chen3bing|  楼主 | 2012-2-16 12:17 | 只看该作者
楼上是说是编译器的问题吗?我想知道的是到底是我程序有问题,还是编译器的BUG。

使用特权

评论回复
11
chen3bing|  楼主 | 2012-2-16 15:03 | 只看该作者
我彻底绝望了,看来这个问题只好不了了之了。

使用特权

评论回复
12
q331513266| | 2012-2-21 12:03 | 只看该作者
你仔细看一下 编译后的汇编程序  区别就出来了

使用特权

评论回复
13
tuzheng| | 2012-2-21 12:13 | 只看该作者
XDATA是RAM区,常量数组只能放ROM区,没办法放RAM区的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2540

帖子

2

粉丝