| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 978 人关注过本帖
标题:大容量数组
只看楼主 加入收藏
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
结帖率:16.67%
收藏
已结贴  问题点数:20 回复次数:11 
大容量数组
我在一个函数里定义了一个数组 u8 a[8301] = {0};
只要程序了一进这个数组就会死机而重启;当我把这个数组定义原封不动的剪切到函数外面,变成全局变量的话,程序无问题了,请问这是为什么?
2014-09-18 09:54
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:4 
不知道,你的u8定义的是什么类型

走向光明的菜鸟学生,励志成为新一代程序猿
2014-09-18 10:07
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
收藏
得分:0 
u8 == unsigned char
2014-09-18 10:16
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:4 
程序在什么环境执行?再贴下这个函数的代码

总有那身价贱的人给作业贴回复完整的代码
2014-09-18 10:22
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
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
程序在什么环境执行?

总有那身价贱的人给作业贴回复完整的代码
2014-09-18 11:04
lqab1983
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2013-11-29
收藏
得分:0 
keil 4
2014-09-18 11:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
数组太大,溢出后冲掉了代码区
2014-09-18 12:23
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:4 
你的堆栈有没有这么大哦?局部变量使用的是堆栈空间,全局变量用的是ram,应该是堆栈溢出出错
2014-09-18 12:44
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 7 楼 lqab1983
运行环境是keil4?先搞清楚你现在在玩的是什么哈。
楼上的几个人已经把我的猜测说出来,问你运行环境是想知道stack-size是多大的

总有那身价贱的人给作业贴回复完整的代码
2014-09-18 13:25
快速回复:大容量数组
数据加载中...
 
   



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

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