为什么 static 和 code 同时存在就程序死

2020-01-20 18:58发布

本帖最后由 dyjhy 于 2015-6-13 10:49 编辑

下面两段内容中,  红 {MOD}表示的, code 和static  不能同时存在,如果同时存在程序就死机,只要去掉任何一个程序都能正常运行。  不知道为什么?
                                                当然,static去掉的话,那一行要移到外面作全局变量,按键才会有效。


补充一下:板了上电,所有都正常,只要按下按键就会死机,我把key_scan里的所有东西注释掉,只留static那一条语句也会死机,这条也删掉的话就会正常。

/*7段共阴字形码表*/
const unsigned char code DB[]={   0x3F ,         /*0-----0*/
                                                         0x06 ,  /*1-----1*/
                                                         0x5B ,  /*2-----2*/
                                                         0x4F ,         /*3-----3*/
                                                         0x66 ,         /*4-----4*/
                                                         0x6D ,         /*5-----5*/
                                                         0x7D ,  /*6-----6*/
                                                         0x07 ,  /*7-----7*/
                                                         0x7F ,         /*8-----8*/
                                                         0x6F ,  /*9-----9*/
                                                         0x77 ,  /*A-----10*/
                                                         0x7C ,         /*B-----11*/
                                                         0x39 ,  /*C-----12*/
                                                         0x5E ,         /*D-----13*/
                                                         0x79 ,  /*E-----14*/
                                                         0x71 ,  /*F-----15*/
       
                                                         0xBF ,         /*0.-----16显示小数点就是原数+16*/
                                                         0x86 ,  /*1.-----17*/
                                                         0xDB ,  /*2.-----18*/
                                                         0xCF ,         /*3.-----19*/
                                                         0xE6 ,         /*4.-----20*/
                                                         0xED ,         /*5.-----21*/
                                                         0xFD ,  /*6.-----22*/
                                                         0x87 ,  /*7.-----23*/
                                                         0xFF ,         /*8.-----24*/
                                                         0xEF ,  /*9.-----25*/
                                                         
       
                                                         0x00 ,         /*关闭-----26*/
                                                         0x73 ,  /*P-----27*/
                                                         0x3E ,  /*U-----28*/
                                                         0x6E ,  /*Y-----29*/
                                                         0x76 ,  /*H-----30*/
                                                         0x38 ,   /*L-----31*/
                                                         0x40         /*'-'-----32*/                                          
                                                 }          ;

void key_scan (void)  //
{
static  unsigned int key_count;//SW1按键判断计数。
        if(SW1==0&&key_count==0)
        {
                sw1_time=0;
                key_count=1;                                  
               
        }
        if(SW1&&key_count) //按键放开
        {
                key_count=0;
                if(sw1_time>10000) key=3;
                else if(sw1_time>5000) key=2;
                else if(sw1_time>20) key=1;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
xiaobendan
1楼-- · 2020-01-22 20:35
dyjhy 发表于 2015-6-13 11:00
编译通过,RAM大根100左右,xdata大概200左右,程序大概4K左右。   单片机RAM是128 xdata 是256   ROM是8 ...

用软调试看看程序跑哪儿了
xiaobendan
2楼-- · 2020-01-22 21:14
dyjhy 发表于 2015-6-13 10:56
static  unsigned int key_count=0;也试过了。

板了上电,所有都正常,只要按下按键就会死机,我把key_s ...

为什么非要用int类型?
xiaobendan
3楼-- · 2020-01-22 22:48
只是分配一个变量就死机,可能还是和RAM分配有关,我在用15W408S,我试试
xiaobendan
4楼-- · 2020-01-22 23:22
刚才在函数中加了你那句,为了消灭警告信息,又在下面的按键处理中加了if(key_count<9)key_count++;
编译后data = 122.7,xdata = 0,code = 3502
没问题啊
另外,你这段程序不管按键不按键都是要执行的吧,尤其是变量分配的问题,只保留变量分配,没有其他程序时,编译后的程序是啥样?
zzz123456
5楼-- · 2020-01-22 23:36
 精彩回答 2  元偷偷看……
xiaobendan
6楼-- · 2020-01-23 02:56
变量分配,你的MEM是不是在large模式,试试在staitc后面加上data关键字看看什么效果

一周热门 更多>