| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 978 人关注过本帖
标题:大容量数组
取消只看楼主 加入收藏
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
结帖率:16.67%
收藏
已结贴  问题点数:20 回复次数:4 
大容量数组
我在一个函数里定义了一个数组 u8 a[8301] = {0};
只要程序了一进这个数组就会死机而重启;当我把这个数组定义原封不动的剪切到函数外面,变成全局变量的话,程序无问题了,请问这是为什么?
2014-09-18 09:54
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
收藏
得分:0 
u8 == unsigned char
2014-09-18 10:16
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
收藏
得分:0 
u8 region_default[8301] = {0};         //这两个变量为什么不能放在Display_parser里,一旦放入,只要进入该函数就会系统重启,即使定义成8192个字节,1024的整倍数也不行  
u8 region_tempsave[8301] = {0};   
void Displayer_parser()
{
......................................................
if(strstr(rev_buf, "$QYSC"))      //2014-09-17
     {
            memcpy(&region_deletenums, rev_buf + 10, 1);
        printf("region_deletenums is %d\r\n",region_deletenums);
        if(region_deletenums == 100)   //本条指令携带的删除的区域的个数,1~100。当=100时,表示删除所有区域,区域编号字段不存在。
        {
            I2C_Write(I2C1, ADDR_24C02N, 237, region_default, 8301);   //程序功能无错,但是为什么还是不能超过1K字节,即使1个字节的写for循环8301次,也是会重启
            memset(&LocalAreaData, 0, sizeof(AreaData));
            memset(area_index, 0, 100);        
        }
        else if((region_deletenums >= 1) && (region_deletenums < QYNUM))    //拟删除的区域的编号,1~100。
        {
            memcpy(region_delete, rev_buf + 11, region_deletenums);
            I2C_Read(I2C1, ADDR_24C02N, 237, &area_nums, 1);       //从EEPROM里读取本地区域个数
            for(i = 0; i < area_nums; i++)
            {
                I2C_Read(I2C1, ADDR_24C02N, 238 + i*83, &area_index[i], 1);       //从EEPROM里读取本地区域的各个编号
            }

            for(j = 0; j < region_deletenums; j++)       //如果在定位通信单元已经设置的区域中没有对应编号则忽略。
            {
                I2C_Read(I2C1, ADDR_24C02N, 237, &area_nums, 1);
                for(m = 0; m < area_nums; m++)
                {
                    I2C_Read(I2C1, ADDR_24C02N, 238 + m*83, &area_index[m], 1);       //从EEPROM里读取本地区域的各个编号
                }
                for(k = 0; k < area_nums; k++)     
                {
                    if(0 == memcmp(region_delete + j, area_index + k, 1))
                    {
                        I2C_Read(I2C1, ADDR_24C02N, 238 + (k+1)*83, region_tempsave, (area_nums - k - 1) * 83);     //保留之后的数据
                        I2C_Write(I2C1, ADDR_24C02N, 238 + k * 83, region_default, (area_nums - k) * 83);      //清零
                        I2C_Write(I2C1, ADDR_24C02N, 238 + k * 83, region_tempsave, (area_nums - k - 1) * 83);     // 将保留的数据赋到清零的位置
                        area_nums -= 1;
                        I2C_Write(I2C1, ADDR_24C02N, 237, &area_nums, 1);  //更新本地区域个数
                        I2C_Read(I2C1, ADDR_24C02N, 237, &area_nums, 1);
                        for(n = 0; n < area_nums; n++)
                        {
                            I2C_Read(I2C1, ADDR_24C02N, 238 + n*83, &area_index[n], 1);       //从EEPROM里读取本地区域的各个编号
                        }
                        break;
                    }
                }
            }
        }
         Display_QYXX();
        return;
     }  
...............................................................
}
2014-09-18 10:32
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
收藏
得分:0 
keil 4
2014-09-18 11:52
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
收藏
得分:0 
说实话,不太清楚。我这个堆栈大小谁来决定
2014-09-19 16:09
快速回复:大容量数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016796 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved