W5500之Socket寄存器区介绍

1)、Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)偏移地址为0x0000,可读写,复位值为0x00

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

MULTI/MFEN

BCASTB

ND/MC/MMB

UCASTB/MIP6B

P3

P2

P1

P0

MULTI/MFEN占用“Socket n模式寄存器”的bit7:

#define Sn_MR_MULTI   0x80

//Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit7(MULTI/MFEN)1,在UDP模式中,使能“组播”。

/*在将Sn_CR寄存器中的OPEN=1之前,必须先将Sn_DIPR寄存器配置为组播的IP地址“224, 1, 1, 11”,再将Sn_DPORT寄存器配置为组播的端口6000,才可以使用组播。*/

#define Sn_MR_MFEN   Sn_MR_MULTI

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit7(MULTI/MFEN)1,在MACRAW模式中,表示使能“MAC滤波器”。*/

BCASTB占用“Socket n模式寄存器”的bit6:

它是“Broadcast Blocking in MACRAW and UDP mode”的简写。BCASTB=1表示使能“UDP广播阻塞模式”或 “MACRAW广播阻塞模式”。

#define Sn_MR_BCASTB   0x40

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit6(BCASTB)1

UDP模式中,表示使能阻塞接收“广播数据包”;

MACRAW模式中,表示使能阻塞接收“广播数据包”;*/

ND/MC/MMB占用“Socket n模式寄存器”的bit5:

#define Sn_MR_ND  0x20

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit5(ND/MC/MMB),

TCP模式中,ND/MC/MMB=1后,W5500一旦收到一个数据包,就会毫不延迟地发送ACK包;在TCP模式中,ND/MC/MMB=0后,W5500会等待“RTR重试定时值寄存器”配置的超时时间后,再发送ACK数据包;*/

#define Sn_MR_MMB   Sn_MR_ND

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit5(ND/MC/MMB)

UDP模式中,且MULTI/MFEN=1(使能组播),如果ND/MC/MMB=0,表示IGMP版本2;如果ND/MC/MMB=1,表示IGMP版本1*/

#define Sn_MR_MC     Sn_MR_ND

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit5(ND/MC/MMB)

MACRAW模式中,如果ND/MC/MMB=1,则表示使能阻塞接收“具有组播的MAC地址的数据包”;*/

UCASTB/MIP6B占用“Socket n模式寄存器”的bit4:

#define Sn_MR_UCASTB   0x10

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit4(UCASTB/MIP6B)

UDP模式中,且MULTI/MFEN=1(使能组播),如果UCASTB/MIP6B=1,它会阻止接收“单播数据包”;*/

#define Sn_MR_MIP6B    Sn_MR_UCASTB

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)bit4(UCASTB/MIP6B)

MACRAW模式中,如果UCASTB/MIP6B=1,它会阻止接收IPv6数据包;*/

P[3:0]占用“Socket n模式寄存器”的bit3:0

#define Sn_MR_CLOSE  0x00

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)中的bit3:0(P[3:0])=0000B,表示Socket n没有使用任何协议*/

P[3:0]=0001B,表示Socket n被配置为TCP协议。

#define Sn_MR_TCP   0x01

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)中的bit3:0(P[3:0])=0001B,表示Socket n使用TCP协议*/

P[3:0]=0010B,表示Socket n被配置为UDP协议。

#define Sn_MR_UDP   0x02

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)中的bit3:0(P[3:0])=0010B,表示Socket n使用UDP协议*/

#define Sn_MR_IPRAW  0x03

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)中的bit3:0(P[3:0])=0011B,表示Socket n使用IPRAW协议。IPRAW属于IP层的数据通信,它是比TCPUDP低一层协议。 IP LAYER RAW SOCK*/

P[3:0]=0100B,表示Socket n被配置为MACRAW协议。

#define Sn_MR_MACRAW  0x04

/*Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)中的bit3:0(P[3:0])=0100B,表示Socket n使用MACRAW协议。MACRAW是一个低于IP层的以太网MAC通信。Socket 0使用MACRAW协议模式*/

地址重定义:

#define Sn_MR(N) (_W5500_IO_BASE_+(0x0000<< 8)+(WIZCHIP_SREG_BLOCK(N)<<3))

//设置“Socket n模式寄存器”在W5500帧中的“第1个字节,第2个字节,第3个字节的高5位和低3位为0

//WIZCHIP_SREG_BLOCK(N)用来指定位于哪个“Socket n模式寄存器”

//WIZCHIP_SREG_BLOCK(N)左移3位,是因为BSB[4:0]位于控制段的bit7:3

2)、Socket n命令寄存器(Socket n Command Register,简写Sn_CR)偏移地址为0x0001,可读写,复位值为0x00

“Socket n命令寄存器”用来设置“OPEN,CLOSE,CONNECT,LISTEN,SEND和RECEIVE”命令。W5500接收命令后,就令“Socket n命令寄存器”的Sn_CR=0x00。即使Sn_CR= 0x00,可能该命令还在处理中,为了检查“命令”是否被处理完成,请检查“Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)”或“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”。

#define Sn_CR_OPEN                   0x01

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x01

根据“Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)”中P[3:0]指定的协议(TCP, UDP MACRAW),初始化并打开“Socket n;

执行后,“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值如下:

在无协议模式中,Sn_SR=0x00,用SOCK_CLOSED表示,Sn_MR中的P[3:0]Sn_MR_CLOSE表示;

TCP模式中,Sn_SR=0x13,SOCK_INIT表示,Sn_MR中的P[3:0]Sn_MR_TCP表示;

UDP模式中,Sn_SR=0x22,SOCK_UDP表示,Sn_MR中的P[3:0]Sn_MR_UDP表示;

MACRAW模式中,Sn_SR=0x42,SOCK_MACRAW表示,Sn_MR中的P[3:0]Sn_MR_MACRAW表示;*/

#define Sn_CR_LISTEN  0x02

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x02,只用于TCP服务器模式,等待接收来自“TCP客户端”的连接请求。

Sn_SR寄存器从SOCK_INIT变成SOCKET_LISTEN时,令“Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x02”,

当“TCP客户端的连接请求”建立成功后,Sn_SR寄存器从SOCK_LISTEN变成SOCK_ESTABLISHED,且Sn_IR寄存器的bit0=1

当“TCP客户端的连接请求”建立失败后,Sn_SR寄存器从SOCK_LISTEN变成SOCK_CLOSEDSn_IR寄存器的bit1=1*/

#define Sn_CR_CONNECT  0x04

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x04,只用于TCP客户端模式,“TCP客户端”会发送“SYN包”给“TCP服务端”。如果连接请求成功,Sn_SR寄存器从SOCK_INIT变成SOCK_ESTABLISHED,且Sn_IR寄存器的bit0=1*/

#define Sn_CR_DISCON  0x08

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x08,只用于TCP模式。无论是“TCP服务器”,还是“TCP客户端”,DISCON命令用来处理“断开连接进程”(“主动关闭[Active close]”或“被动关闭[Passive close]);

“主动关闭[Active close]”就是它将断开连接请求(FIN数据包)传输到“所连接的对等端”。

“被动关闭[Passive close]”就是当从“对等端”接收到FIN数据包时,再将FIN数据包回传给“对等端”。

当“断开请求成功”,就是说“FIN数据包”和“ACK数据包”被成功接收了,Sn_SR寄存器变成SOCK_CLOSED

否则,Sn_IR寄存器的bit3=1,然后再让Sn_SR寄存器变成SOCK_CLOSED

如果“Socket n关闭”不是由“DISCON命令”引起的,则不用发送“断开请求”,Sn_SR寄存器就会变成SOCK_CLOSED

如果“Socket n关闭”是采用通讯从“对等端”接收到“RST数据包”,Sn_SR寄存器会无条件变成SOCK_CLOSED

*/

#define Sn_CR_CLOSE  0x10

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x10

执行CLOSE命令,就会关闭“Socket n”,同时,Sn_SR寄存器变成SOCK_CLOSED*/

#define Sn_CR_SEND  0x20

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x20

执行SEND命令,将位于“Socket n TX buffer”中的数据发送出去,了解更多详情,

请参考“Socket n的发送缓冲区剩余量大小寄存器(Socket n TX Free Size Register,简写Sn_TX_FSR)”,“Socket n的发送缓冲区写指针寄存器(Socket n TX Write Pointer Register,简写Sn_TX_WR)”和“Socket n的发送缓冲区读指针寄存器(Socket n TX Read Pointer Register,简写Sn_TX_RD)*/

#define Sn_CR_SEND_MAC  0x21

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x21

只用于“UDP模式”,基本操作是与发送“SEND命令”相同的。一般来说,发送“SEND命令数据”通常需要先通过自动ARP(地址解析协议)请求获得“目的地MAC地址”才能进行传输。而“SEND_MAC命令” 却不需要使用自动ARP请求。此时,“目的地MAC地址”使用的是主机Sn_DHAR 的设置,而不是通过ARP过程获取的。*/

#define Sn_CR_SEND_KEEP  0x22

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x22

只用于TCP模式,SEND_KEEP命令通过发送“1字节在线心跳包”来检查连接状态。如果“对方”不能在“超时计数期”内反馈“在线心跳包”,这个连接将会被关闭并触发“超时中断”。*/

#define Sn_CR_RECV  0x40

/*Socket n命令寄存器(Socket n Command Register,简写Sn_CR)的值为0x40

RECV命令”通过使用“Socket n的接收缓冲区的接收量大小寄存器(Socket n RX Received Size Register,简写Sn_RX_RSR)”来完成在“Socket n接收缓存”中接收数据的过程。了解更多详情,请参考“Socket n的接收缓冲区的接收量大小寄存器(Socket n RX Received Size Register,简写Sn_RX_RSR)”,“Socket n的的接收缓冲区的读指针寄存器(Socket n RX Read Pointer Register,简写Sn_RX_RD)”和“Socket n的接收缓冲区的写指针寄存器(Socket n RX Write Pointer Register,简写Sn_RX_WR)*/

3)、Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)偏移地址为0x0002。只读,复位值为0x00

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Reserved

Reserved

Reserved

SEND_OK

TIMEOUT

RECV

DISCON

CON

Sn_IR寄存器的bit7:5为保留。

#define Sn_IR_SENDOK   0x10

/*(Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)bit4SEND_OK

如果“SEND命令”执行完成,则SEND_OK=1*/

#define Sn_IR_TIMEOUT  0x08

/*Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)bit3TIMEOUT

如果“ARP数据包或者TCP数据包”超时,则TIMEOUT=1;*/

#define Sn_IR_RECV   0x04

/*Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)bit2RECV

如果接收到“对方的数据”,则RECV=1;*/

#define Sn_IR_DISCON  0x02

/*Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)bit1DISCON

如果接收到来自“对方的FINFIN/ACK包”,则DISCON=1;*/

#define Sn_IR_CON   0x01

/*Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)bit0CON

如果与对方建立连接成功,且Sn_SR寄存器变为“SOCK_ESTABLISHED”,则CON=1;*/

地址重定义:

#define Sn_IR(N) (_W5500_IO_BASE_+(0x0002<< 8) + (WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0,用来访问Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)

Socket n中断寄存器(Socket n Interrupt Register,简写Sn_IR)偏移地址为0x0002

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”*/

4)、Socket n状态寄存器(Socket n Status Register,简写Sn_SR)偏移地址为0x0003。

#define SOCK_CLOSED  0x00

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x00,

SOCK_CLOSED表示,“Socket n”处于关闭状态,资源被释放。

DICON命令,CLOSE命令被执行,或当触发超时中断时,“Sn_SR寄存器”变为0x00,SOCK_CLOSED*/

#define SOCK_INIT  0x13

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x13,

SOCK_INIT表示,表示“Socket n”以TCP模式打开。首先将“Socket n模式寄存器(Socket n Mode Register,简写Sn_MR)”中的bit3:0(P[3:0])=0001B,即设置为“TCP模式”;再将Sn_CR寄存器中的OPEN命令置1,则Sn_SR寄存器的值为0x13,即SOCK_INIT*/

#define SOCK_LISTEN  0x14

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x14,

SOCK_LISTEN表示,表示“Socket n”工作在“TCP服务器模式”,正在等待“来自TCP客户端的连接请求”。当TCP服务器成功接收到“连接请求”时,Sn_SR寄存器的值变成为SOCK_ESTALBLISHED;否则,Sn_IR寄存器中的TIMEOUT1,并触发TCP超时中断,Sn_SR寄存器的值才会变成为SOCK_CLOSED*/

#define SOCK_ESTABLISHED             0x17

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x17,

SOCK_ESTABLISHED表示;Sn_SR寄存器的值为“SOCK_LISTEN”时,如果 TCP服务器”处理来自“TCP客户端”的SYN数据包,或者是“TCP客户端”设置“CONNECT命令(SYN数据包)”成功,Sn_SR寄存器的值都会变成SOCK_ESTABLISHED。在Sn_SR寄存器的值为“SOCK_ESTABLISHED”时,“数据包”就可以使用“SEND命令”发送,或是通过“RECV命令”执行接收。*/

#define SOCK_CLOSE_WAIT   0x1C

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x1C,

SOCK_CLOSE_WAIT表示“半关闭状态”;这个状态表示“Socket n”接收到来自“对方端”的“FIN数据包(断开请求)”,这是一个“半关闭状态”,可以进行数据传输。若要完全关闭,则要执行“DISCON命令”,如果只是关闭“Socket n”,则要执行“CLOSE命令”。*/

#define SOCK_UDP  0x22

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x22,

SOCK_UDP表示“Socket n”在“UDP模式”下打开的。当Sn_MR寄存器的P[3:0]=0010B

并且“OPEN命令”被执行了,则Sn_SR的值就会变成“SOCK_UDP”。不像“TCP模式”,它无需“连接处理”,就可以进行数据传输。*/

#define SOCK_MACRAW   0x42

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x42,

SOCK_MACRAW表示“Socket 0”是在“MACRAW模式”下打开的。

当设置Sn_MR寄存器的P[3:0]=0100B,即“MACRAW模式”,并且“OPEN命令”被执行了,则Sn_SR的值就会变成“SOCK_MACRAW”。和“UDP模式的Socket”一样,“SOCK_MACRAW模式”中的“Socket 0”无需连接处理,就可以直接传输“MAC(Ethernet frame)*/

#define SOCK_SYNSENT   0x15

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x15,

SOCK_SYNSENT表示,它是一个临时状态,表示Socket n”发送“SYN数据包(连接请求包)”给对方。它是在发送“CONNECT命令”后, Sn_SR寄存器的值从SOCK_INIT变成SOCK_ESTABLISHED过程中出现的临时数值。当“Sn_SR寄存器的值”为SOCK_SYNSENT那个时刻,接收到来自对方端的“连接接受包(SYN/ACK数据包)”,

然后“Sn_SR寄存器的值”就变成为SOCK_ESTABLISHED。否则,出现TCP超时后,“Sn_SR寄存器的值”会变成SOCK_CLOSED*/

#define SOCK_SYNRECV   0x16

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x16,

SOCK_SYNRECV表示,它是一个临时状态,表示Socket n”成功接收来自对方端的“SYN数据包(连接请求包)”。如果“Socket n”成功发送“SYN/ACK应答数据包”给对方端,“Sn_SR寄存器的值”会变成SOCK_ESTABLISHED。如果发送失败,在出现超时(Sn_IR寄存器的TIMEOUT位置1)后,“Sn_SR寄存器的值”会变成SOCK_CLOSED

*/

#define SOCK_FIN_WAIT  0x18

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x18,

SOCK_FIN_WAIT表示,它是一个临时状态,表示Socket n”正在关闭。它显示在“断开处理”中,是主动关闭还是被动关闭。当“断开处理”完成,或是超时,“Sn_SR寄存器的值”会变成SOCK_CLOSED*/

#define SOCK_CLOSING  0x1A

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x1A,

SOCK_CLOSING表示,它是一个临时状态,表示“Socket n”正在关闭。它显示在“断开处理”中,是主动关闭还是被动关闭。当“断开处理”完成,或是超时,“Sn_SR寄存器的值”会变成SOCK_CLOSED*/

#define SOCK_TIME_WAIT   0x1B

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x1B,

SOCK_TIME_WAIT表示,它是一个临时状态,表示“Socket n”正在关闭。它显示在“断开处理”中,是主动关闭还是被动关闭。当“断开处理”完成,或是超时,“Sn_SR寄存器的值”会变成SOCK_CLOSED*/

#define SOCK_LAST_ACK    0x1D

/*如果“Socket n状态寄存器(Socket n Status Register,简写Sn_SR)”的值为0x1D,

SOCK_LAST_ACK表示。它是一个临时状态,表示“Socket n”在被动关闭状态下,正在等待对“断开连接请求(FIN packet)”做出回应的“FIN/ACK数据包”。如果“Socket n”成功接收到了“断开连接请求(FIN packet)”做出回应的“FIN/ACK数据包”或触发超时中断,则 Sn_SR寄存器的值”会变成SOCK_CLOSED*/

地址重定义:

#define Sn_SR(N) (_W5500_IO_BASE_+(0x0003<< 8)+(WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0,用来访问Socket n状态寄存器(Socket n Status Register,简写Sn_SR)

Socket n状态寄存器(Socket n Status Register,简写Sn_SR)偏移地址为0x0003

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”*/

5)、Socket n源端口寄存器(Socket n Source Port Register,简写Sn_PORT)偏移地址为0x0004,可读写,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x0004

0x0005

寄存器名称

Sn_PORT0  (8位数值)

Sn_PORT1  (8位数值)

“Socketn源端口寄存器”保存的是“Socket n的端口”,属于“本地端口”。

地址重定义:

#define Sn_PORT(N) (_W5500_IO_BASE_+(0x0004<<8)+(WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0,用来访问Socket n源端口寄存器(Socket n Source Port Register)

Socket n源端口寄存器(Socket n Source Port Register)偏移地址为0x0004

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”*/

6)、Socket n的目的硬件地址寄存器(Socket n Destination Hardware Address Register,简写Sn_DHAR)偏移地址为0x0006,可读写,复位值为0xFFFFFFFFFF;采用“大端存储方式”。

寄存器地址

0x0006

0x0007

0x0008

0x0009

0x000A

0x000B

寄存器名称

Sn_DHAR0

Sn_DHAR1

Sn_DHAR2

Sn_DHAR3

Sn_DHAR4

Sn_DHAR5

在“UDP模式”中,当发送“SEND_MAC命令”时,“Socket n的目的硬件地址寄存器”保存的是“Socket  n”要访问的“MAC地址”。在“ARP过程”中,通过“CONNECT命令/SEND命令”获取“目的硬件地址”。

地址重定义:

#define Sn_DHAR(N) (_W5500_IO_BASE_+(0x0006<< 8)+(WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的目的硬件地址寄存器”偏移地址为0x0006

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”*/

7)、Socket n的目的IP地址寄存器(Socket n Destination IP Address Register,简写Sn_DIPR)偏移地址为0x000C,可读写,复位值为0xFFFFFFFF;采用“大端存储方式”。

寄存器地址

0x000C

0x000D

0x000E

0x000F

寄存器名称

Sn_DIPR0

Sn_DIPR1

Sn_DIPR2

Sn_DIPR3

在“TCP客户端模式”中,还没有使用“CONNECT命令”之前,“Socket n的目的IP地址寄存器”保存的是“TCP 服务器”的IP地址。

在“TCP服务器模式”中,“Socket n的目的IP地址寄存器”保存的是“TCP客户端”已成功地建立了连接的IP地址

在“UDP模式”中,“Socket n的目的IP地址寄存器”保存的是“对方端”的IP地址,它是通过“SEND命令”或“SEND_MAC命令”接收“UDP数据包”得到的。

地址重定义:

#define Sn_DIPR(N) (_W5500_IO_BASE_ + (0x000C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的目的IP地址寄存器偏移地址为0x000C

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”*/

8)、Socket n的目的端口寄存器(Socket n Destination Port Register,简写Sn_DPORT)偏移地址为0x0010,可读写,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x0010

0x0011

寄存器名称

Sn_DPORT0

Sn_DPORT1

在“TCP客户端模式”中,还没有使用“CONNECT命令”之前,“Socket n的目的端口寄存器”保存的是“TCP 服务器的监听端口”。

在“TCP服务器模式”中,“Socket n的目的端口寄存器”保存的是“TCP客户端”已成功地建立了连接的端口数值

在“UDP模式”中,“Socket n的目的端口寄存器”保存的是“对方端”的端口数值,它是通过“SEND命令”或“SEND_MAC命令”接收“UDP数据包”得到的。

地址重定义:

#define Sn_DPORT(N) (_W5500_IO_BASE_ + (0x0010 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的目的端口寄存器偏移地址为0x0010

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

9)、Socket n的最大分段大小寄存器(Socket n Maximum Segment Size Register,简写Sn_MSSR)偏移地址为0x0012,可读写,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x0012

0x0013

寄存器名称

Sn_MSSR0

Sn_MSSR1

注意:MSS是“Maximum Segment Size”的缩写,它指在TCP连接中,一个“TCP段”所能承载的最大数据量。当TCP工作在被动模式时,“Socket n的最大分段大小寄存器”显示的是“对方端的设置的MSS”。

地址重定义:

#define Sn_MSSR(N) (_W5500_IO_BASE_ + (0x0012 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的最大分段大小寄存器”的偏移地址为0x0012

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

10)、Socket n的IP报文转发优先级寄存器(Socket n IP TOS Register,简写Sn_TOS)是Sn_TOS寄存器,偏移地址为0x0015,可读写,复位值为0x00

TOS是“Type Of Service field in IP Header”的缩写,IP报头中的服务字段的类型。

地址重定义:

#define Sn_TOS(N) (_W5500_IO_BASE_ + (0x0015 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket nIP报文转发优先级寄存器偏移地址为0x0015

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

11)、Socket n的TTL值寄存器(Socket n IP TTL Register,简写Sn_TTL)是Sn_TTL寄存器,偏移地址为0x0016,可读写,复位值为0x80

TTL是“Time To Live field in IP header”的缩写。每个IP数据包在被转发时,其“TTL值”就会被减一。一旦TTL值变为零,路由器会丢弃该数据包,并发送一个“ICMP Time Exceeded消息”回“源主机”,通知“源端数据包”已经超时无法到达目的地。

地址重定义:

#define Sn_TTL(N) (_W5500_IO_BASE_ + (0x0016 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket nTTL值寄存器(Socket n IP TTL Register,简写Sn_TTL)偏移地址为0x0016

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

12)、Socket n的接收缓冲区大小寄存器(Socket n Receive Buffer Size Register,简写Sn_RXBUF_SIZE)偏移地址为0x001E,可读写,复位值为0x02,即“Socket n”接收缓存的大小为2K字节。

用来指定“Socket n”接收缓存的大小。

W5500有一个“16KB的接收内存”用作“8个Socket接收缓存区”,可以通过 “Sn_RXBUF_SIZE寄存器”,偏重新分配“各个Socket接收缓存的大小”,但“8个Socket接收缓存区”的总内存不能超过16K。注意:Socket n接收缓存区大小”可以配置 1K2K4K8K16K字节。如果配置为其他大小,则 W5500不能正常的从对方主机接收数据

地址重定义:

#define Sn_RXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001E << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

“Socket n的接收缓冲区大小寄存器偏移地址为0x001E

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

13)、Socket n的发送缓冲区大小寄存器(Socket n Transmit Buffer Size Register,简写Sn_TXBUF_SIZE)偏移地址为0x001F,可读写,复位值为0x02,即“Socket n”发送缓存的大小为2K字节。

用来指定该Socket发送缓存的大小。

W5500有一个“16KB的发送内存”用作“8个Socket发送缓存区”,通过 “Sn_TXBUF_SIZE寄存器”,重新分配“各个Socket发送缓存的大小”,但“8个Socket发送缓存区”的总内存不能超过16K。注意:Socket n发送缓存区大小”可以配置为1K2K4K8K16K字节。如果配置为其他大小,则 W5500不能正常给对方主机发送数据

地址重定义:

#define Sn_TXBUF_SIZE(N)   (_W5500_IO_BASE_ + (0x001F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

“Socket n的发送缓冲区大小寄存器偏移地址为0x001F

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

14)、Socket n的发送缓冲区剩余量大小寄存器(Socket n TX Free Size Register,简写Sn_TX_FSR)偏移地址为0x0020,可读写,复位值为0x0800,即“Socket n的发送缓冲区”有2K字节是没有使用。采用“大端存储方式”。

寄存器地址

0x0020

0x0021

寄存器名称

高8位

低8位

“Socket n的发送缓冲区剩量余大小寄存器”用来指示“Socket n的发送缓冲区”的空闲区有多少个字节没有被使用,意思是还可以写入多少个字节。

地址重定义:

#define Sn_TX_FSR(N)  (_W5500_IO_BASE_ + (0x0020 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的发送缓冲区剩余量大小寄存器”偏移地址为0x0020

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

15)、Socket n的发送缓冲区读指针寄存器(Socket n TX Read Pointer Register,简写Sn_TX_RD)偏移地址为0x0022,只读,复位值为0x0000

寄存器地址

0x0022

0x0023

寄存器名称

Sn_TX_RD0

Sn_TX_RD1

“Socket n的发送缓冲区读指针寄存器”通过“OPEN命令”进行初始化。但是在“TCP连接”期间,它会被重新初始化。“Socket n的发送缓冲区读指针寄存器”初始化之后,会根据“SEND命令”自增。

“SEND命令”传输的是“Socket n的发送缓冲区”中的数据,即“Sn_TX_RD所指向的地址”到“Sn_TX_WR所指向的地址”之间的数据。在传输完这部分数据之后,“SEND命令”会将“Sn_TX_RD寄存器”等于“Sn_TX_WR寄存器” 的值。

当“Sn_TX_RD寄存器”增加的值超出最大值0xFFFF,“Sn_TX_RD寄存器”会忽略进位,仅使用低16位的值。

地址重定义:

#define Sn_TX_RD(N)        (_W5500_IO_BASE_ + (0x0022 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的发送缓冲区读指针寄存器”偏移地址为0x0022

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

18)、Socket n的发送缓冲区写指针寄存器(Socket n TX Write Pointer Register,简写Sn_TX_WR)偏移地址为0x0024,可读可写,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x0024

0x0025

寄存器名称

Sn_TX_WR0

Sn_TX_WR1

“Sn_TX_WR寄存器”可以通过“OPEN命令”进行初始化。但是在“TCP连接”期间,它会被重新初始化。

“Socket n的发送缓冲区写指针寄存器”的读取和更新:

①读取“Socket n的发送缓冲区”中将要保存“传输数据的首地址”。

②从“Socket n的发送缓冲区”对应的首地址开始,保存需要“传输的数据”;

③在保存完“传输数据”之后,将“Sn_TX_WR寄存器”的值增加到传输数据大小。如果增加后,超过最大值0xFFFF,“Sn_TX_WR寄存器”会自动忽略进位,并自动更新为低16位的值。

④通过使用“SEND命令”发送保存在“Socket n的发送缓冲区”中的数据。

地址重定义:

#define Sn_TX_WR(N)        (_W5500_IO_BASE_ + (0x0024 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的发送缓冲区写指针寄存器”偏移地址为0x0024

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

17)、Socket n的接收缓冲区的接收量大小寄存器(Socket n RX Received Size Register,简写Sn_RX_RSR)偏移地址为0x0026,可读可写,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x0026

0x0027

寄存器名称

Sn_RX_RSR0

Sn_RX_RSR1

“Socket n的接收缓冲区的接收量大小寄存器”显示了“Socket n的接收缓冲区”中已接收和保存的数据大小。Sn_RX_RSR的值不会超过“Sn_RXBUF_SIZE寄存器”大小,且计算的为“Socket n的接收缓冲区的写指针(Sn_RX_WR)” 和“Socket n的的接收缓冲区的读指针(Sn_RX_RD)”之间的空间大小。

地址重定义:

#define Sn_RX_RSR(N)       (_W5500_IO_BASE_ + (0x0026 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的接收缓冲区的接收量大小寄存器”偏移地址为0x0026

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

18)、Socket n的的接收缓冲区的读指针寄存器(Socket n RX Read Pointer Register,简写Sn_RX_RD)偏移地址为0x0028,可读可写,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x0028

0x0029

寄存器名称

Sn_RX_RD0

Sn_RX_RD1

“Socket n的的接收缓冲区的读指针寄存器”可以通过“OPEN命令”进行初始化。

“Socket n的的接收缓冲区的读指针寄存器”读取更新步骤:

①读取保存在“Socket n的的接收缓冲区”中数据的首地址;

②从保存在“Socket n的的接收缓冲区”中数据的首地址开始读取数据;

③在读取完毕“接收数据”后,将“Socket n的的接收缓冲区的读指针寄存器Sn_RX_RD” 的值更新为“所读数据大小”。如果增加后的值 超过最大值 0xFFFF,“Socket n的的接收缓冲区的读指针寄存器”将会忽略进位,只取低16位值。

④在接收到“RECV命令”后,将更新后的“Socket n的的接收缓冲区的读指针寄存器Sn_RX_RD”值告知W5500。

地址重定义:

#define Sn_RX_RD(N)        (_W5500_IO_BASE_ + (0x0028 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的的接收缓冲区的读指针寄存器”偏移地址为0x0028

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

19)、Socket n的接收缓冲区的写指针寄存器(Socket n RX Write Pointer Register,简写Sn_RX_WR)偏移地址为0x002A,只读,复位值为0x0000;采用“大端存储方式”。

寄存器地址

0x002A

0x002B

寄存器名称

Sn_RX_WR 0

Sn_RX_WR 1

“Socket n的接收缓冲区的写指针寄存器”通过“OPEN命令”进行初始化。并且随着数据接收自动增加。

如果“Socket n的接收缓冲区的写指针寄存器Sn_RX_WR”的值增长到超过最大值 0xFFFF,将会自动忽略进位,并自动更新为低16位的值。

地址重定义:

#define Sn_RX_WR(N)        (_W5500_IO_BASE_ + (0x002A << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的接收缓冲区的写指针寄存器”偏移地址为0x002A

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

20)、Socket n的中断使能寄存器(Socket n Interrupt Mask Register,简写Sn_IMR)偏移地址为0x002C,可读可写,复位值为0xFF

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Reserved

Reserved

Reserved

SEND_OK

TIMEOUT

RECV

DISCON

CON

Socket n的中断使能寄存器(Socket n Interrupt Mask Register,简写Sn_IMR)的bit4(SEND_OK)=1,使能“SEND命令”执行完成,产生SEND_OK中断。

Socket n的中断使能寄存器(Socket n Interrupt Mask Register,简写Sn_IMR)的bit3(TIMEOUT)=1,使能“ARP数据包或者TCP数据包”超时,产生TIMEOUT中断。

Socket n的中断使能寄存器(Socket n Interrupt Mask Register,简写Sn_IMR)的bit2(RECV)=1,使能接收到“对方的数据”,产生RECV中断。

Socket n的中断使能寄存器(Socket n Interrupt Mask Register,简写Sn_IMR)的bit1(DISCON)=1,使能接收到来自“对方的FIN或FIN/ACK包”,产生DISCON中断。

Socket n的中断使能寄存器(Socket n Interrupt Mask Register,简写Sn_IMR)的bit0(CON)=1,使能与对方建立连接成功,且Sn_SR寄存器变为“SOCK_ESTABLISHED”,产生CON中断。

地址重定义:

#define Sn_IMR(N)          (_W5500_IO_BASE_ + (0x002C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket n的中断使能寄存器”偏移地址为0x002C

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

21)、Socket n的IP头中的分片偏移量寄存器(Socket n Fragment Offset in IP header Register,简写Sn_FRAG)偏移地址为0x002D,可读可写,复位值为0x4000;采用“大端存储方式”。

寄存器地址

0x002D

0x002E

寄存器名称

Sn_FRAG0

Sn_FRAG1

Fragment Offset:分片偏移,用于标识分片在原始数据报文中的位置。

地址重定义:

#define Sn_FRAG(N)         (_W5500_IO_BASE_ + (0x002D << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

Socket nIP头中的分片偏移量寄存器”偏移地址为0x002D

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

22)、保活定时器寄存器(Keep alive timer Register,简写Sn_KPALVTR)偏移地址为0x002F,可读可写,复位值为0x00

保活定时器寄存器也称“Socket在线时间寄存器”,只用于“TCP模式”,时间单位是5秒。

“KA数据包”的条件:当“Sn_SR寄存器”的值为“SOCK_ESTABLISHED”时,W5500与“对方端”至少进行过一次收或发后,或者进行“KA数据包”传输。

如果Sn_KPALVTR > 0,W5500会在“一定时间周期”内自动传输“KA数据包”以检查 TCP 的连接状态(自动在线验证)。

如果Sn_KPALVTR = 0,将不会启动“自动在线验证”。主机可以通过对“保活定时器寄存器(Keep alive timer Register,简写Sn_KPALVTR)”配置,发送“KA数据包”,执行“手动在线验证”。在Sn_KPALVTR > 0时,W5500将会无视“手动在线验证”。

地址重定义:

#define Sn_KPALVTR(N)      (_W5500_IO_BASE_ + (0x002F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500帧”的第1个字节,第2个字节和第3个字节的高5位值,3位为0

保活定时器寄存器偏移地址为0x002F

WIZCHIP_SREG_BLOCK(N)用来选择“Socket n寄存器区”;*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95074.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95074.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95074.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酉矩阵(Unitary Matrix)和随机矩阵

先讨论酉矩阵&#xff08;Unitary Matrix&#xff09;的性质。1. 酉矩阵定义酉矩阵&#xff08;Unitary Matrix&#xff09;是复数域上的方阵&#xff0c;满足以下条件&#xff1a;其中&#xff1a;是 的共轭转置&#xff08;即 Hermitian 转置&#xff0c; &#xff09;。是单…

「iOS」————单例与代理

iOS学习单例代理代理模式的原理代理的循环引用设计模式单例 优点&#xff1a; 全局访问&#xff1a;单例模式确保一个类只有一个实例&#xff0c;并提供全局访问点&#xff0c;方便在整个应用中共享数据或功能。节省资源&#xff1a;由于只创建一个实例&#xff0c;可以减少内…

Microsoft Dynamics AX 性能优化解决方案

一、方案背景Microsoft Dynamics AX 是功能强大的企业ERP系统&#xff0c;虽然Microsoft 已推出基于云的现代化 ERP 平台 Dynamics 365 Finance and Operations&#xff0c;提供了更高的性能和持续更新&#xff0c;用来替代Dynamics AX。在考虑升级到Dynamics 365之前&#xff…

ARM保留的标准中断处理程序入口和外设中断处理程序入口介绍

在ARM架构中&#xff0c;中断处理是一个关键机制&#xff0c;它允许CPU在执行主程序时能够响应外部或内部的事件。对于ARM MCU&#xff08;微控制器单元&#xff09;而言&#xff0c;中断处理程序入口通常分为两类&#xff1a;ARM保留的标准中断处理程序入口和外设中断处理程序…

防火墙环境下的全网服务器数据自动化备份平台搭建:基于 rsync 的完整实施指南

一、项目总览 1.内容介绍 本文以 3 台 CentOS 7.9 服务器&#xff08;Web 服务器、NFS 服务器、备份服务器&#xff09;为载体&#xff0c;详解如何在全防火墙开启的前提下&#xff0c;搭建一套自动化数据备份平台&#xff1a;每日自动打包 Web 站点、NFS 共享数据及系统关键…

Spring之【Import】

目录 Import注解 源码分析 使用示例 ImportSelector 源码分析 使用示例 DeferredImportSelector 源码分析 使用示例 ImportBeanDefinitionRegistrar 源码分析 使用示例 Import注解 源码分析 处理组件类上的Import注解 将Import引入类对应的BeanDefinition对象添加…

RN项目环境搭建和使用-Mac版本(模拟器启动不起来的排查)

ReactNative&#xff1a; https://github.com/facebook/react-native https://reactnative.cn/docs/getting-started &#xff08;可以先通读一下这个&#xff09; 环境搭建 &#xff08;mac版&#xff09;https://juejin.cn/post/7404860612758765605 搭建之前确认版本&#x…

悬赏任务系统网站兼职赚钱小程序搭建地推抖音视频任务拉新源码功能详解二开

功能详解&#xff08;一&#xff09;登录与注册1、登录&#xff1a;打开系统用户端&#xff0c;输入已注册的手机号&#xff0c;若为首次登录或忘记密码&#xff0c;可通过 “找回密码” 功能&#xff0c;按提示验证身份后重置密码登录。 2、注册&#xff1a;点击 “注册” 按钮…

scikit-learn/sklearn学习|线性回归解读

【1】引言 前序学习进程中&#xff0c;对SVM相关的数学原理进行了探索和推导&#xff0c;相关文章链接包括且不限于&#xff1a; python学智能算法&#xff08;二十六&#xff09;|SVM-拉格朗日函数构造-CSDN博客 python学智能算法&#xff08;二十八&#xff09;|SVM-拉格朗…

音视频学习(五十一):AAC编码器

什么是AAC编码器&#xff1f; 高级音频编码&#xff08;Advanced Audio Coding&#xff0c;简称AAC&#xff09; 是一种有损音频压缩技术&#xff0c;旨在作为MP3的下一代标准而开发。它的主要目标是在比MP3更低的比特率下提供更好的音质&#xff0c;同时具备更强的灵活性和功能…

10-netty基础-手写rpc-定义协议头-02

netty系列文章&#xff1a; 01-netty基础-socket02-netty基础-java四种IO模型03-netty基础-多路复用select、poll、epoll04-netty基础-Reactor三种模型05-netty基础-ByteBuf数据结构06-netty基础-编码解码07-netty基础-自定义编解码器08-netty基础-自定义序列化和反序列化09-n…

计算机毕设缺乏创新点?基于大数据的快手平台用户活跃度分析系统给你思路【程序开发+项目定制】

精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、项目介绍二…

01.【面试题】在SpringBoot中如何实现多数据源配置

文章目录 1. 什么是多数据源 1.1 基本概念 1.2 传统单数据源 vs 多数据源 单数据源架构 多数据源架构 2. 为什么需要多数据源 2.1 业务场景需求 2.2 技术优势 3. 多数据源的实现方式 3.1 静态多数据源 3.2 动态多数据源 4. 环境准备 4.1 创建SpringBoot项目 pom.xml依赖配置 4.…

redis主从模型与对象模型

redis淘汰策略 首先我们要明确这里说的淘汰策略是淘汰散列表中的key-value&#xff0c;而不是value中的各个数据结构 过期key中 volatile-lru 从设置了过期时间的键中&#xff0c;移除最近最少使用的键&#xff08;LRU算法&#xff09;。适合需要优先保留高频访问数据的场景…

快速搭建开源网页编辑器(vue+TinyMCE)

文章目录 Tiny MCE 安装方法 1. 安装node.js 2. 创建vue3项目 3. 安装TinyMCE依赖并使用 (1)在component文件夹创建Editor.vue文件 (2)编辑App.vue文件 (3)运行项目 (4)获取并设置API key (5)设置中文菜单 Tiny MCE 安装方法 1. 安装node.js 下载地址:https://nod…

ADK【4】内置前端调用流程

文章目录说明ADK内置前端ADK内置前端开启流程说明 本文学自赋范社区公开课&#xff0c;仅供学习和交流使用&#xff0c;不用作任何商业用途&#xff01; ADK内置前端 ADK作为最新一代Agent开发框架&#xff0c;不仅功能特性非常领先&#xff0c;而且还内置了非常多的工具&am…

LLMs之GPT-5:OpenAI 发布更智能、更快速、更有用的 AI 模型—内置思考能力,赋能人人专家级智能—技术突破、性能评估与安全保障全面解读

LLMs之GPT-5&#xff1a;OpenAI 发布更智能、更快速、更有用的 AI 模型—内置思考能力&#xff0c;赋能人人专家级智能—技术突破、性能评估与安全保障全面解读 导读&#xff1a;2025年8月7日&#xff0c;OpenAI 发布了 GPT-5&#xff0c;这是他们目前最智能的 AI 系统。它在编…

Java 中操作 R 的全面指南

Java 中操作 R 的全面指南 引言 Java作为一种广泛使用的编程语言,具有跨平台、高性能、可扩展等特点。随着大数据和机器学习的兴起,Java在处理和分析复杂数据集方面发挥着越来越重要的作用。R语言,作为一种专门用于统计计算和图形展示的语言,同样在数据分析领域有着举足轻…

数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!

目录 1.优先级队列 2. 堆的概念 3. 堆的存储方式 4. 堆的创建 4.1 向下调整 4.2 堆的创建 4.3 堆的插入 4.4 堆的删除 5.用堆模拟实现优先级队列 6.常用接口的介绍 6.1 PriorityQueue 的特性 6.2 PriorityQueue 的方法 7. Top K问题 1.优先级队列 队列是一种先进先…

C语言自定义类型深度解析:联合体与枚举

在C语言中&#xff0c;自定义类型为数据组织提供了极大的灵活性。除了常用的结构体&#xff0c;联合体&#xff08;共用体&#xff09;和枚举也是非常重要的自定义类型。本文将结合实例&#xff0c;详细解析联合体和枚举的特性、用法及实际应用场景。 一、联合体&#xff08;Un…