新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-6-23
- 在线时间
- 4 小时
|
1金钱
希望大神们看一眼,真的没招了。。。。
定义了一个结构体如下
__packed typedef struct
{
char Socketnum[3]; //socket
uint16_t data_len_unread; //all data length
char recdata[UART3_BUFF_SIZE-13];
} struct_ec20;
同时定义了一个一个子函数
char EC20_TCP(struct_ec20 *var_sever_name, char *var_ip_addr, char *var_port_no, char var_soc_no)
{
char string_Send[50];
//var_sever_name->Socketnum=13;
sprintf(string_Send, "AT+QICLOSE=%d\r\n",var_soc_no);
Send_AT(string_Send,"OK","ERROR",1,1);
sprintf(string_Send, "AT+QIOPEN=1,%d,\042TCP\042,%s,%s,0,0\r\n",var_soc_no,var_ip_addr,var_port_no);// buffer mode
if(!Send_AT(string_Send,"+QIOPEN",NULL,100,1)) return 1; //create socket
else
{
if(strx[10]==',' )
{
if(strx[11]=='0')
{
//temp_no=(u8)(strx[9]-'0');
var_sever_name->Socketnum[0]=strx[9];
var_sever_name->Socketnum[0]=0;
}
else return 0;
}
else if(strx[11] ==',')
{
if(strx[12]=='0')
{
var_sever_name->Socketnum[0]=strx[9];
var_sever_name->Socketnum[1]=strx[10];
}
else return 0;
}
}
return 3;
}
在main.c 中定义了一个全局变量, struct_ec20 glb_ec20_plat;
然后调用上面的子函数
led1_sta_flag=EC20_TCP(&glb_ec20_plat,IP_ADDR_PLATFORM,PORT_ADDR_PLATFORM,1);
问题是
子函数运行到这一步就会进入HardFault_Handler,
var_sever_name->Socketnum[0]=0;
之前定义了socketnumb 为int,然后直接赋值,赋值为1可以,但是要是赋值为var_sever_name->Socketnum=strx[0]-‘0’就不可以,其中strx[0]=0x31
|
最佳答案
查看完整内容[请看2#楼]
试试在函数里定义一个struct_ec20 *GLB_ec20_plat = glb_ec20_plat;后面的操作用GLB_ec20_plat这个指针
|