L勇 发表于 2012-9-19 16:11:55

prefilon 发表于 2012-12-9 17:09:35

void uip_send(const void *data, int len)
{
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:55:51

L勇 发表于 2012-12-11 22:56:07

prefilon 发表于 2012-12-12 09:28:48

L勇 发表于 2012-12-11 22:56 static/image/common/back.gif
在我的程序没看到这段,可能是没用到,if(data != uip_sappdata) 是判断要发送的数据是否已在发送缓冲区 ...

这个uip_sappdata 和 uip_appdata都是空指针,在接收到数据以后将地址指向uip_buf,现在我做主动上发,没收到数据之前,这两个指针都是空的,调用后直接硬件错误跳出程序了。

现在是直接再调用前手动将这2个都指向uip_buf。

L勇 发表于 2012-12-12 12:54:57

L勇 发表于 2012-12-12 12:55:58

prefilon 发表于 2012-12-12 14:44:09

uip_sappdata 表示发送缓冲区,最终和uip_appdata 一致,我全部搜索了一下,这两个基本保持一致地址,指向uip_buf

L勇 发表于 2012-12-12 15:20:13

prefilon 发表于 2012-12-12 16:31:54

L勇 发表于 2012-12-12 15:20 static/image/common/back.gif
不是表示发送缓冲区,是指向要发送的数据(宏定义了),uip_appdata是指向应用层的用户数据,还有uip_app ...

两个定义的时候都是空指针……


用的时候才给了一个地址指向&uip_buf

L勇 发表于 2012-12-15 21:35:12

prefilon 发表于 2012-12-16 10:52:05

本帖最后由 prefilon 于 2012-12-16 10:58 编辑

L勇 发表于 2012-12-15 21:35 static/image/common/back.gif
要是空指针初始化时给它赋NULL了吗,

void * uip_sappdata;

定义就是无类型的指针,但没分配地址。


上面的定义,声明了但没分配地址,和分配一个null空地址异曲同工,如果越限强制访问都会指向错误中断。
页: [1]
查看完整版本: 请教高手uip_send