void SpidermanSendCmdFeedback()
{
NWK_PACKET_V3 feedback_sp;
int i=0;
int crc;
feedback_sp.addrInfo_v3 = 0x00;//保留
feedback_sp.frameHead_f_v3 = 0x55;
feedback_sp.frameHead_s_v3 = 0xaa;
feedback_sp.frameType_v3 = 0x0a;// cmd feedback_sp type
feedback_sp.DeviceType_v3 = 0x07;
feedback_sp.PVersion_v3 = 0x03;
//feedback_sp.length = 0x07;
feedback_sp.hop_v3 = 0x00;
feedback_sp.payload_v3[i++] = 0xff;
feedback_sp.payload_v3[i++] = 0xff;//feedback_sp addr
//feedback_sp.payload[i++] =
switch(usart.pBuffer[0])
{
case 17:
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0] - 4];
break;
case 25:
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0] - 10];
break;
default:
feedback_sp.payload_v3[i++] = 0xff;
break;
}
feedback_sp.payload_v3[i++] = 0x04;
switch(usart.pBuffer[0])
{
case 17:
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0] - 5];//包序列号
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0] - 1];//crc1
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0]]; //crc2
break;
case 25:
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0] - 11];//包序列号
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0] - 1];//crc1
feedback_sp.payload_v3[i++] = usart.pBuffer[usart.pBuffer[0]]; //crc2
break;
default:
feedback_sp.payload_v3[i++] = 0xff;
feedback_sp.payload_v3[i++] = 0xff;
feedback_sp.payload_v3[i++] = 0xff;
break;
}
feedback_sp.payload_v3[i++] = 0x02;//指令送达蜘蛛侠成功
feedback_sp.length_v3 = i+ 1+ 2;
crc = addCrc(&feedback_sp);
feedback_sp.payload_v3[i++] = crc;
feedback_sp.payload_v3[i++] = crc >> 8;
printRawTy( (char*)&feedback_sp.frameHead_f_v3,feedback_sp.length_v3 + PACKET_HEADER_SIZE - 1 );
}
访问此函数时如果机构体变量feedback_sp定义为局部变量的话,函数执行完毕后,结构体变量的值均没发生变化,时局部变量的默认值;但是将此变量定义为全局变量的话,函数执行完毕后,结构体变量的值是期望的值,我用的是IAR for AVR编译器。请问则是为什么呀?是不是编译器设置不对还是另有原因?
------解决方案--------------------
------解决方案--------------------
(1)定义为全局变量的时候,这个结构体存储在内存的全局变量区,一直到整个程序执行结束,内存都不会被释放。
(2)定义在函数中的时候,这个结构体存在栈区,函数执行结束会被释放。
所以定义在函数内的时候就出现了你说的现象。
(3)使用malloc进行分配其实是将这个结构体保存在堆区。不去free的话,自己不会释放,使用更灵活。如果你将指向这块地址的指针定义在函数中,并且函数结束没有释放,也没有将这个地址传递出去。那么这块申请的内存将不会被释放一直到程序结束。所以要注意释放。
------解决方案--------------------
我想应该不是语言的问题,还上看看你的编译器