{
if(len > 0)
{
uip_slen = len;
if(data != uip_sappdata)
{
memcpy(uip_sappdata, (data), uip_slen);
}
}
}
这个地方,很费解的是if(data != uip_sappdata)
入口指针data的就是uip_appdata,而程序前面已经uip_sappdata = uip_appdata = &uip_buf[]了。 L勇 发表于 2012-12-11 22:56 static/image/common/back.gif
在我的程序没看到这段,可能是没用到,if(data != uip_sappdata) 是判断要发送的数据是否已在发送缓冲区 ...
这个uip_sappdata 和 uip_appdata都是空指针,在接收到数据以后将地址指向uip_buf,现在我做主动上发,没收到数据之前,这两个指针都是空的,调用后直接硬件错误跳出程序了。
现在是直接再调用前手动将这2个都指向uip_buf。 uip_sappdata 表示发送缓冲区,最终和uip_appdata 一致,我全部搜索了一下,这两个基本保持一致地址,指向uip_buf L勇 发表于 2012-12-12 15:20 static/image/common/back.gif
不是表示发送缓冲区,是指向要发送的数据(宏定义了),uip_appdata是指向应用层的用户数据,还有uip_app ...
两个定义的时候都是空指针……
用的时候才给了一个地址指向&uip_buf 本帖最后由 prefilon 于 2012-12-16 10:58 编辑
L勇 发表于 2012-12-15 21:35 static/image/common/back.gif
要是空指针初始化时给它赋NULL了吗,
void * uip_sappdata;
定义就是无类型的指针,但没分配地址。
上面的定义,声明了但没分配地址,和分配一个null空地址异曲同工,如果越限强制访问都会指向错误中断。
页:
[1]