不设置容量的数组C语言,大容量数组

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;

}

...............................................................

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值