热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DSP以太网通信

文章目录1.以太网模块初始化netinit1.1SPI串口初始化1.2复位CH395芯片1.3初始化CH395相关变量1.4CH395芯片初始化1.5初始化socket1.6初始化

文章目录

    • 1. 以太网模块初始化netinit
      • 1.1 SPI串口初始化
      • 1.2 复位CH395芯片
      • 1.3 初始化CH395相关变量
      • 1.4 CH395芯片初始化
      • 1.5 初始化socket
      • 1.6 初始化并打开socket
    • 2. 以太网通信的具体实现
      • 2.1 接收缓冲区数据
      • 2.2 写数据到缓存区




1. 以太网模块初始化netinit


1.1 SPI串口初始化

    我们使用的以太网协议栈管理芯片是CH395L,芯片是通过SPI串口与DSP连接的。
在这里插入图片描述

void CH395_PORT_INIT(void)
{SpiaRegs.SPIBRR=0x0005;SpiaRegs.SPISTS.all=0x0000; // Baud rate 3.75MSpiaRegs.SPIPRI.all=0x0001; // stop immediately //--DA7614工作时SPI的设置: 无延迟的下降沿方式(时钟的初始态为高),16 bit dataSpiaRegs.SPICCR.all=0x0047; // initialize spi,output at falling edge, 16 bit dataSpiaRegs.SPICTL.all=0x0006; // Master,normal phase, enable transmissionSpiaRegs.SPICCR.all=0x00c7;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 复位CH395芯片

/*==============================================================================
* Function Name : CH395CMDReset
* Description : 复位CH395芯片
* Input : None
* Output : None
* Return : None
==============================================================================*/

void CH395CMDReset(void)
{xWriteCH395Cmd(CMD00_RESET_ALL);xEndCH395Cmd();DELAY_US(60000L);
}/*==============================================================================
/*==============================================================================
* Function Name : xWriteCH395Cmd
* Description : 向CH395写命令
* Input : cmd 8位的命令码
* Output : None
* Return : None
==============================================================================*/

void xWriteCH395Cmd(UINT8 cmd)
{ xEndCH395Cmd(); /* 防止CS原来为低,先将CD置高 */xCH395CmdStart( ); /* 命令开始,CS拉低 */Spi395Exchange(cmd); /* SPI发送命令码 */DELAY_US(2L); /* 必要延时,延时1.5uS确保读写周期不小于1.5uS */
}
/*******************************************************************************
* Function Name : Spi395Exchange
* Description : 硬件SPI输出且输入8个位数据(SPI读写数据函数)
* Input : d---将要送入到CH395的数据
* Output : None
* Return : None
*******************************************************************************/

UINT8 Spi395Exchange( UINT8 d )
{ UINT8 RES1;SpiaRegs.SPITXBUF&#61;d<<8; /* 先将数据写入SPI数据寄存器,然后查询SPI状态寄存器以等待*/ while(SpiaRegs.SPISTS.bit.INT_FLAG&#61;&#61;0){} /* 查询SPI状态寄存器的标志位以等待SPI字节传输完成数据,发送完成标志位置1*/RES1&#61;(UINT8)SpiaRegs.SPIRXBUF;return(RES1); /*从SPI数据寄存器读出数据*/
}/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;

1.3 初始化CH395相关变量

/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : InitCH395InfParam
* Description : 初始化CH395Inf参数
* Input : None
* Output : None
* Return : None
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

void InitCH395InfParam(void)
{memset(&CH395Inf,0,sizeof(CH395Inf)); /* 将CH395Inf全部清零*/memcpy(CH395Inf.IPAddr,CH395IPAddr,sizeof(CH395IPAddr)); /* 将IP地址写入CH395Inf中 */memcpy(CH395Inf.GWIPAddr,CH395GWIPAddr,sizeof(CH395GWIPAddr)); /* 将网关IP地址写入CH395Inf中 */memcpy(CH395Inf.MASKAddr,CH395IPMask,sizeof(CH395IPMask)); /* 将子网掩码写入CH395Inf中 */
}
struct _CH395_SYS//CH395Inf变量的数据结构
{UINT8 IPAddr[4]; /* CH395IP地址 32bit*/UINT8 GWIPAddr[4]; /* CH395网关地址 32bit*/UINT8 MASKAddr[4]; /* CH395子网掩码 32bit*/UINT8 MacAddr[6]; /* CH395MAC地址 48bit*/UINT8 PHYStat; /* CH395 PHY状态码 8bit*/UINT8 MackFilt; /* CH395 MAC过滤&#xff0c;默认为接收广播&#xff0c;接收本机MAC 8bit*/UINT32 RetranCount; /* 重试次数 默认为10次*/UINT32 RetranPeriod; /* 重试周期,单位MS,默认200MS */UINT8 IntfMode; /* 接口模式 */UINT8 UnreachIPAddr[4]; /* 不可到达IP */UINT16 UnreachPort; /* 不可到达端口 */
};

1.4 CH395芯片初始化

/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : CH395Init
* Description : 配置CH395的IP,GWIP,MAC等参数&#xff0c;并初始化
* Input : None
* Output : None
* Return : 函数执行结果
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

UINT8 CH395Init(void)
{UINT8 i;i &#61; CH395CMDCheckExist(0x65); if(i !&#61; 0x9a)return CH395_ERR_UNKNOW; /* 测试命令&#xff0c;如果无法通过返回0XFA *//* 返回0XFA一般为硬件错误或者读写时序不对 */CH395CMDSetIPAddr(CH395Inf.IPAddr); /* 设置CH395的IP地址 */
// CH395CMDSetMACAddr(CH395Inf.MacAddr); /* 设置CH395的MAC地址 */CH395CMDSetGWIPAddr(CH395Inf.GWIPAddr); /* 设置网关地址 */CH395CMDSetMASKAddr(CH395Inf.MASKAddr); /* 设置子网掩码&#xff0c;默认为255.255.255.0*/ i &#61; CH395CMDInitCH395(); /* 初始化CH395芯片 */return i;
}
/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : CH395CMDCheckExist
* Description : 测试命令&#xff0c;用于测试硬件以及接口通讯
* Input : testdata 1字节测试数据
* Output : None
* Return : 硬件OK&#xff0c;返回 testdata按位取
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

UINT8 CH395CMDCheckExist(UINT8 testdata)
{UINT8 i;xWriteCH395Cmd(CMD11_CHECK_EXIST);xWriteCH395Data(testdata);i &#61; xReadCH395Data();xEndCH395Cmd();return i;
}
/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : CH395CMDInitCH395
* Description : 初始化CH395芯片。
* Input : None
* Output : None
* Return : 返回执行结果
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

UINT8 CH395CMDInitCH395(void)
{UINT8 i &#61; 0;UINT8 s &#61; 0;xWriteCH395Cmd(CMD0W_INIT_CH395);xEndCH395Cmd();while(1){DELAY_US(5000L); /* 延时查询&#xff0c;建议2MS以上*/s &#61; CH395GetCmdStatus(); /* 不能过于频繁查询*/if(s !&#61;CH395_ERR_BUSY)break; /* 如果CH395芯片返回忙状态*/if(i&#43;&#43; > 200)return CH395_ERR_UNKNOW; /* 超时退出,本函数需要500MS以上执行完毕 */}return s;
}

1.5 初始化socket

/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : InitSocketParam
* Description : 初始化socket
* Input : None
* Output : None
* Return : None
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

void InitSocketParam(void)
{memset(&ScokInf,0,sizeof(ScokInf)); /* 将ScokInf[0]全部清零*/memcpy(ScokInf.IPAddr,Socket0DesIP,sizeof(Socket0DesIP)); /* 将目的IP地址写入 */ScokInf.DesPort &#61; Socket0DesPort; /* 目的端口 */ScokInf.SourPort &#61; Socket0SourPort; /* 源端口 */ScokInf.ProtoType &#61; PROTO_TYPE_UDP; /* TCP模式(TCP改为UDP) */
// ScokInf.TcpMode &#61; TCP_CLIENT_MODE;
}
struct _SCOK_INF
{UINT8 IPAddr[4]; /* socket目标IP地址 32bit*/UINT8 MacAddr[6]; /* socket目标地址 48bit*/UINT8 ProtoType; /* 协议类型 */UINT8 ScokStatus; /* socket状态&#xff0c;参考scoket状态定义 */UINT8 TcpMode; /* TCP模式 */UINT32 IPRAWProtoType; /* IPRAW 协议类型 */UINT16 DesPort; /* 目的端口 */UINT16 SourPort; /* 目的端口 */UINT16 SendLen; /* 发送数据长度 */UINT16 RemLen; /* 剩余长度 */UINT8 *pSend; /* 发送指针 */
};

1.6 初始化并打开socket

/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : CH395SocketInitOpen
* Description : 配置CH395 socket 参数&#xff0c;初始化并打开socket
* Input : None
* Output : None
* Return : None
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

void CH395SocketInitOpen(void)
{UINT8 i;/* socket 0为TCP 客户端模式 */CH395SetSocketDesIP(0,ScokInf.IPAddr); /* 设置socket 0目标IP地址 */CH395SetSocketProtType(0,ScokInf.ProtoType); /* 设置socket 0协议类型 */CH395SetSocketDesPort(0,ScokInf.DesPort); /* 设置socket 0目的端口 */CH395SetSocketSourPort(0,ScokInf.SourPort); /* 设置socket 0源端口 */i &#61; CH395OpenSocket(0); /* 打开socket 0 */mStopIfError(i); /* 检查是否成功 */
}

2. 以太网通信的具体实现

    实际上&#xff0c;我们设置了一个标志量flag_send&#xff0c;当进入CAN中断服务子程序后&#xff0c;即证明单片机收到了来自传感器的数据信息&#xff0c;我们就将flag_send置1&#xff0c;然后调用CH395发送和接收函数&#xff0c;将数据送到上位机或者从上位机接收指令。即我们实际上是采用的轮询方式实现的以太网通信。

2.1 接收缓冲区数据

/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : CH395GetReceLength
* Description : 读取接收缓冲区数据
* Input : sockindex Socket索引len 长度pbuf 缓冲区
* Output : None
* Return : None
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

void CH395GetReceData(UINT8 sockindex,UINT16 len,UINT8 *pbuf)
{UINT16 i;if(!len)return;xWriteCH395Cmd(CMD30_READ_RECV_BUF_SN);xWriteCH395Data(sockindex);xWriteCH395Data((UINT8)len);xWriteCH395Data((UINT8)(len>>8));for(i &#61; 0; i < len; i&#43;&#43;){*pbuf &#61; xReadCH395Data();pbuf&#43;&#43;;}xEndCH395Cmd();
}

2.2 写数据到缓存区

/*&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
* Function Name : CH395SendData
* Description : 向发送缓冲区写数据
* Input : sockindex Socket索引databuf 数据缓冲区len 长度
* Output : None
* Return : None
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;*/

void CH395SendData(UINT8 sockindex,UINT8 *databuf,UINT16 len)
{UINT16 i;xWriteCH395Cmd(CMD30_WRITE_SEND_BUF_SN);xWriteCH395Data((UINT8)sockindex);xWriteCH395Data((UINT8)len);xWriteCH395Data((UINT8)(len>>8));for(i &#61; 0; i < len; i&#43;&#43;){xWriteCH395Data(*databuf&#43;&#43;);}xEndCH395Cmd();
}


推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了网络编程的要点,包括InetAddress类获取IP地址的方法,IP地址的定义和表示方法,IPv4和IPv6的区别,以及网络通信协议中的端口和协议类型。 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • IP双栈环境下网络应用迁移
    IPv4向IPv6迁移有多种途径,在选择具体的迁移方式时,当前环境中运行的应用是否支持IPv6是重要的考量因素之一,同时在编写新的应用时,需要考虑新编写的应用不仅可以适应当前主流的IPv4环境, ... [详细]
  • 实验2:Open vSwitch虚拟交换机实践   实验3:OpenFlow协议分析实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通 ... [详细]
  • python计算数据包校验和(python接口数据校验)
    本文目录一览:1、怎么用python算p值和t检验 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
    转载自:http:blog.csdn.nethulihuiarticledetails3244520原文:HowtousetheSocketAsyncE ... [详细]
author-avatar
手机用户2502862793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有