为什么传了参,参数内容会丢!
1.我的设备从串口收到一串字符,经过解析把相关内容存到我定义的set_time 和 set_name两个数组里,这两个定义在函数里,是局部变量。然后我把他们作为参数传到函数Response_ReInit()里,(1)
u8 set_time[5] = {0};
u8 set_name[16] = {0};
memcpy(set_time, rev_buf + num + 1, 5); //保存操作时间
memcpy(set_name, rev_buf + num + 6, 16); //保存操作员
if(ReInit())
{
Response_ReInit(set_time, set_name, TXXX_addr, txsq_context, txsqcontext_lens);
}
(2)
u8 Response_ReInit(u8 *time, u8 *name, u32 Dest_Address, char *context, u16 lens)
{
u16 currlen = 0;
//控制
context[currlen++] = 0x00;
//业务类型
context[currlen++] = 0xB3;
//初始化结果
context[currlen++] = 0; //0=初始化完成, 1=重初始化失败
//用户机ID号
context[currlen++] = ICXX.localID[0];
context[currlen++] = ICXX.localID[1];
context[currlen++] = ICXX.localID[2];
//时间
memcpy(context + currlen, time, 5);
currlen += 5;
//操作员
memcpy(context + currlen, name, 16);
currlen += 16;
//电文长度
lens = currlen + 1;
//校验和
context[currlen] = BD1_Chksum(context, currlen);
//发送数据
if(bd1_using != 1)
{
BD1_TXSQ(Dest_Address, context, lens);
bd1_using = 1;
}
return 1;
}
2.但我现在的问题是这两个变量里的值值我通过打印数值看到确实是存进去了,但在Response_ReInit()里这2个变量的值奇怪的全是0了。
其中,那个if(ReInit())
{
Response_ReInit(set_time, set_name, TXXX_addr, txsq_context, txsqcontext_lens);
}的ReInit()是对整个系统的重初始化,这个函数的执行非常占用时间,大概需要执行10秒,因为他对EEPROm的8500多个字节的数据做了写0操作,不知道这会不会有影响,set_time 和 set_name不在写0操作里
3. 我无奈的把这个2个变量定义成全局的,问题就不会发生,参数内容可以很好传递,这是为什么?
我水平比较低,请教大家了 !