新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32F407+LAN8720A+lwIP+FreeRTOS以太网移植实战

发布时间:2026/9/25 1:12:44来源:尧图网络
STM32F407+LAN8720A+lwIP+FreeRTOS以太网移植实战
做嵌入式网络开发ST官方的CubeMX HAL库几乎成了基础设施。而把 STM32F407、lwIP、LAN8720A 和 FreeRTOS 组合起来是工业设备联网最常见的一套组合拳。这篇文章分享我实际移植过程中最完整的配置顺序、自动生成代码的关键改动、以及我踩过的那些坑。适合刚接触以太网和 RTOS 的嵌入式工程师也适合准备把 lwIP 用到自己板子上的朋友。我自己最初从裸机转向 RTOS协议栈时被一堆线程、信号量、pbuf、DMA 描述符搞得昏头转向但一旦把每个层次的职责理清楚整套系统就非常顺理成章。这里先给结论CubeMX 能帮你完成 90% 的移植工作剩下 10% 需要你理解并手动调整的就是 PHY 地址、时钟、堆栈与优先级。1. 方案选型为什么这套组合是 F407 联网的“省心配置”1.1 为什么选 RMII 而不是 MIISTM32F407 的以太网 MAC 支持两种对外接口MII 和 RMII。MII 是传统的 25 引脚接口时钟 25MHzRMII 则把引脚砍掉一半只需要 50MHz 的参考时钟和两根数据线就能完成收发。这里要注意RMII 不是速率减半它通过 50MHz 双沿采样等效带宽和 MII 一致但引脚少、布局压力小特别适合两层板或空间受限的工业控制板。F407 的 RMII 接口最终映射到 PA1、PA7、PC4、PC5、PB11、PB12、PB13 这些引脚和 MII 完全复用所以 CubeMX 里选中 RMII 后引脚会自动分配不用改硬件。实际选 RMII 还是 MII主要看 PHY 芯片和 PCB 成本。如果你用的 PHY 是老型号如 DP83848它同时支持 MII 和 RMII但驱动 MII 需要更多引脚、更多信号线做阻抗匹配和磁珠布局会更麻烦。对于 LAN8720A 这种只支持 RMII 的廉价 PHY选 RMII 是唯一路径所以方案上没悬念。F407 官方评估板大多是 RMII LAN8720A 的组合社区资料多遇到问题也好搜索。有些国产 PHY 如 YT8512 也是 RMII 接口引脚定义基本一致后面如果想换 PHY只需要调整寄存器定义即可。1.2 LAN8720A 凭什么成为默认答案LAN8720A 是一颗 Microchip 出品的 10/100M 以太网物理层芯片支持 RMII 接口内置了 1.2V 电压调节器所以整颗芯片可以只用 3.3V 单电源供电不需要额外产生 1.2V。它的封装是 QFN 或 SQFN外围只需一个 25MHz 晶振、一组网络变压器磁珠、电阻电容就能工作。比起 DP83848 这种需要多路电源的老 PHYLAN8720A 在硬件上省事太多这也是为什么大量 STM32F407 开发板都标配这颗芯片。这颗芯片默认的 PHY 地址是 0寄存器布局和 ST 标准 PHY 驱动高度兼容。CubeMX 里虽然没有独立的 LAN8720A 选项但选择 LAN8742 也可以正常编译运行。因为二者的基本控制寄存器、基本状态寄存器、链接状态位定义都遵循 IEEE 802.3 标准lwIP 的 ethernetif.c 对 PHY 的操作本质上就是读写寄存器 0x00 和 0x01以及通过状态位判断链接是否 up。所以移植时只要确认 PHY 地址和复位延时剩下都交给协议栈。补充一个细节LAN8720A 的 nINT 引脚可以配置为中断输出。对实时性要求高的场景把 nINT 接到 MCU 的 EXTI 引脚在拔插网线时能第一时间收到 PHY 状态变化再由中断回调通知 lwIP 更新链路状态。CubeMX 会自动完成 ETH 和 lwIP 的部分但这根中断线要自己补。1.3 FreeRTOS 和 lwIP 到底什么关系很多新手看到“FreeRTOS lwIP”就以为是把两个系统堆在一起。实际上两者工作在不同层次FreeRTOS 负责任务调度、信号量、消息队列这些 RTOS 能力lwIP 是 TCP/IP 协议栈负责 ARP、IP、TCP、UDP 等网络协议。lwIP 可以选择“NO_SYS裸机”和“带 OS”两种运行模式。裸机模式下lwIP 的定时器和处理函数需要人工轮询带 OS 模式下lwIP 会生成专门的 tcpip_thread 线程配合操作系统的信号量和邮箱保护数据链路层访问netconn 和 socket API 对业务层提供线程安全接口。CubeMX 里把 lwIP 的 OS 选项设置为 FreeRTOS 之后会自动在代码里创建 tcpip_thread、eth_rx_thread、eth_link_thread 这些线程也会自动生成与 FreeRTOS 适配的 sys_arch.c/sys_arch.h。所以你要做的是理解这套线程模型而不是从零手写一个移植层。这也是为什么我强烈建议用 CubeMX 而不是手动把 lwIP 驱动复制进来。手动移植不是不行只是容易忽略内核裁剪、锁接口、定时器回调等细节而这些恰恰是网络栈稳定性的关键。2. CubeMX 配置全流程按这个顺序点能少踩一半坑2.1 工程创建与时钟配置打开 CubeMX新建工程选择 STM32F407VET6 或 F407VGT6。RCC 配置里 HSE 选择“Crystal/Ceramic Resonator”也就是外部晶振。绝大多数 F407 开发板使用的是 25MHz 晶振如果你的板子用的是 8MHz后面 PLL 配置要根据实际频率重新推算不要照抄。时钟树建议这样设置HSE 25MHz 经过 PLL 倍频和分频后SYSCLK 168MHzAHB 分频 1 得到 168MHzAPB1 分频 4 得到 42MHzAPB2 分频 2 得到 84MHz。ETH 外设挂在 AHB1 总线上所以 AHB 尽量保持 168MHz以太网 DMA 在满速 AHB 下才有更好的吞吐表现。F407 最高支持 168MHz这是官方稳定值我一般直接拉满后面跑 lwIP 收发和 TCP 吞吐测试都正常。在这步容易混淆的是 ETH 外设时钟和 RMII 参考时钟。RMII 需要的 50MHz REF_CLK 并不是从 HCLK 自动分出来的而是从 PA1 引脚外部输入。这个 50MHz 通常由 LAN8720A 内部产生LAN8720A 外接 25MHz 晶振内部 PLL 倍频到 50MHz从 REFCK0 引脚输出给 F407 的 PA1。所以 PA1 在 CubeMX 里会默认被配置为输入模式。如果你用的是 MCU 的 MCO 给 PHY 提供 25MHz 输入时钟请确保 MCO 频率、PHY 工作模式和 50MHz 参考时钟的来源都匹配。2.2 以太网外设与 PHY 配置在 Connectivity 中选择 ETH接口模式选 RMII。选完后会自动分配引脚PA1 是 RMII_REF_CLKPA7 是 CRS_DVPC4/PC5 是 RXD0/RXD1PB11 是 TX_ENPB12/PB13 是 TXD0/TXD1PA2 是 MDIOPC1 是 MDC。这些引脚尽量不要挪动因为它们内部已经绑定了 ETH 外设的复用功能。如果你的板子上 LAN8720A 的引脚连接和默认分配不一致必须先去硬件原理图确认不要强行改软件。在 ETH 参数窗口里需要确认 PHY Address 设为 0。CubeMX 默认可能给的是 0x00如果你的 LAN8720A 模块上的 PHYAD0、PHYAD1 都是下拉到地那么地址就是 0。一旦 PHY 地址不对执行 HAL_ETH_ReadPHYRegister 时返回的可能全是 0xFFFF 或直接超时lwIP 会认为网线从未插入。PHY 芯片型号可以选 LAN8742用来匹配 ST 的驱动逻辑前面说过两者寄存器兼容。也可以选“Custom”然后手动指定寄存器地址但没必要折腾。MDC 时钟频率建议不要超过 2.5MHzCubeMX 一般会根据 AHB 频率自动分频默认值可用。如果 MDC 太快部分 PHY 可能无法正常响应尤其是一些国产兼容 PHY。测试时如果出现 MDIO 读写异常先把 MDC 分频调大一点再试。2.3 FreeRTOS 配置要点进入 Middleware - FREERTOSCMSIS 版本选 V2任务调度默认抢占式即可。在配置界面里把 Memory Management 选为 heap_4并设置一个足够大的堆空间。lwIP 的 TCP/IP 任务、DMA buffer、协议栈内存都会从 FreeRTOS 堆里分配初始建议给 64KB。F407 内部有 192KB RAM以太网缓冲区预留后还有不少空间给业务逻辑。如果后续业务复杂可以再调大但也不要盲目给到 128KB否则留给业务任务的内存就少了。这里必须重点提示FreeRTOS 会占用 SysTick 作为系统时基而 STM32 的 HAL 库默认也依赖 SysTick 实现 HAL_GetTick 和 HAL_Delay。如果两方共用 SysTick逻辑上会混乱最容易看到的现象就是 HAL_Delay 不延迟或者系统直接卡进 HardFault。CubeMX 检测到 FreeRTOS 后会自动把 HAL 时基源切换到 TIM6 或 TIM7前提是你不手滑改回去。生成工程后检查一下 Project Manager - Project - HAL Settings 里的 Timebase Source如果还是 SysTick必须手动改成 TIM6 或 TIM7。另外FreeRTOS 任务优先级和中断优先级有关。lwIP 相关的 ETH 中断优先级不要配置得太低建议在 NVIC 里给 ETH 中断一个中等优先级比如优先级 4 或 5。如果优先级过低网络高负载时会丢失 DMA 中断表现就是 ping 不通或者吞吐骤降。2.4 lwIP 参数设置进入 Middleware - LWIP先把 OS 选项从 No OS 改成 FreeRTOS。这一步非常关键它决定了生成的代码是裸机轮询版本还是带 RTOS 支持版本。如果忘记改后续代码里不会有 sys_sem 等 RTOS 适配层netconn API 无法在 FreeRTOS 任务里被安全调用。IP 层建议先用静态 IP192.168.1.10掩码 255.255.255.0网关 192.168.1.1。DHCP 在复杂网络里方便但调试阶段静态 IP 更可控。TCP 和 UDP 都勾选ICMP 默认启用后面调试 ping 要依赖它。Netconn API 勾选上这会在 lwipopts.h 里定义 LWIP_NETCONN 为 1业务代码里就可以使用 netconn 系列接口。Mem Size 建议暂时保持默认等确认能跑通之后再根据内存占用调整。这里多说一句 TCP 和 UDP 的使能。CubeMX 生成代码时会根据这些开关裁剪 lwIP 的功能如果你只做 TCP 通信可以关掉 UDP 来节省内存但在调试阶段建议 TCP、UDP 都开着方便用其他工具辅助测试。2.5 生成工程前再检查什么检查三个地方第一时钟树是否保存HSE 是否选择正确第二ETH 的 PHY Address 是否是 0第三FreeRTOS 的时基是否已经切到 TIM。确认后点击 Generate Code选择 Keil MDK-ARM 或 IAR 工程。生成完成后先编译一遍如果 CubeMX 版本较老可能需要在 stm32f4xx_hal_conf.h 里检查 ETH 相关宏是否打开新版本一般会自动打开。3. 自动生成的代码里真正要改的地方3.1 确认 PHY 地址和 PHY 寄存器定义生成代码后打开 ethernetif.c 或 stm32f4xx_hal_eth.c搜索 PHY_ADDRESS。有的版本里 PHY 地址定义在 ethernetif.h有的在 lwipopts.h。如果实际硬件上的 LAN8720A 地址是 0这一项就不用动。但很多第三方模块会把 PHYAD 引脚设计成悬空或上拉导致 PHY 地址变成 4 或其他值。判断方法很简单用调试器在 HAL_ETH_ReadPHYRegister 这个函数调用处下断点查看读取的返回值正常情况下 0x01 寄存器返回的 bit0 应该等于 1表示 link 已经出现。如果读到 0xFFFF多半是 MDC/MDIO 没通或者 PHY 地址不对。STM32CubeMX 的 HAL 库封装里通过宏 PHY_BASIC_STATUS 和 PHY_LINKED_STATUS 来判断链接状态。如果这个宏定义的值与你的 PHY 不兼容比如某些 PHY 把链接状态放在不同寄存器或不同位就需要自己改 ethernetif.c 里读取寄存器的地址。不过 LAN8720A 和 LAN8742 的寄存器布局完全一致一般不用动。3.2 DMA 描述符和缓冲区对齐F407 的 ETH 外设使用 DMA 搬运网络数据DMA 要求描述符和缓冲区在 32 字节边界上对齐。CubeMX 自动生成的代码里通过 __ALIGN_BEGIN 和 __ALIGN_END 修饰全局数组确保描述符和 buffer 都在对齐边界。生成后不要随便把这些数组改成 malloc或者从你自己写的内存管理函数分配。如果确实要动态分配请使用 memalign 并保证 32 字节对齐否则 ETH DMA 可能出现不可预知的内存踩踏。我自己就遇到过一种情况换了一个国产 PHY 之后只要数据量一大就 HardFault。后来查下来不是 PHY 问题而是我在工程初始化阶段把 ETH 的 DMA 描述符数组从全局变量改成了动态内存池分配而那个内存池的对齐粒度只有 8 字节。恢复成全局数组或者把内存池对齐修正到 32 字节后问题消失。所以这块我特意写出来希望大家不要犯同样的错误。3.3 初始化顺序与线程模型main() 函数里调用顺序一般是MX_ETH_Init - MX_LWIP_Init - MX_FREERTOS_Init - osKernelStart。注意 MX_LWIP_Init 会在启动调度器之前调用它内部完成了 lwIP 协议栈初始化和 netif_add。但真正收发数据的线程比如 eth_rx_thread 和 tcpip_thread要等到 osKernelStart 之后才真正运行。这没有问题因为网络报文在协议栈初始化完成前后并不会影响初始化流程。如果你试图在业务任务里直接调用未初始化的 netconn 接口或者是把 netconn_new 放在静态初始化函数里可能在调度器启动前就调用了此时信号量可能还没创建就会触发断言或 HardFault。正确做法是在一个独立的 FreeRTOS 任务里创建 netconn 连接并给这个任务分配足够的栈空间。这里要特别强调任务栈netconn API 的调用会经过 lwIP 内部的消息循环栈开销比普通裸机函数大。默认的 osThreadNew 创建任务如果只给 128 字节栈调用 netconn 过程中几乎必崩。实测经验TCP/IP 相关的业务任务至少给 1024 字节的栈空间如果涉及大块数据处理给 2048 字节更稳妥。同时建议在 FreeRTOSConfig.h 里把 configCHECK_FOR_STACK_OVERFLOW 设置为 1 或 2开启栈溢出检测这样能在开发阶段快速暴露问题。3.4 链路状态更新link 线程和中断回调CubeMX 生成的 lwIP 移植层里有一个 eth_link_thread它会定时查询 PHY 的基本状态寄存器判断网线有没有插上然后调用 netif_set_link_up/down 通知协议栈。这个线程默认存在但有些版本里它被裁剪了只有 eth_rx_thread。如果发现网线插上后状态不更新先确认 link 线程是否存在。想更及时地获知插拔事件可以用 LAN8720A 的中断输出。把 nINT 引脚连接到 MCU 的 EXTI 输入在中断里发一个信号量或消息给某个任务任务里读取 PHY 状态后调用 netif_set_link_up/down。这块需要根据你的板子接线自行实现CubeMX 不会帮你生成。4. 实测调试从“模块上电”到“PC 能 ping 通”4.1 一步步验证 PHY 是否工作先不要急着调协议栈第一步确认硬件链路。给板子上电后观察 LAN8720A 模块上的 LED如果有 LINK 灯插上网线应该亮起SPEED 灯代表 100M亮起来说明协商成百兆。灯不亮首先怀疑 PHY 供电、复位、晶振。用万用表测 PHY 供电引脚用示波器看晶振引脚能否起振以及 REFCK0 是否有 50MHz 输出。如果 REFCK0 没有输出检查外部晶振的负载电容和 PHY 工作模式配置引脚。第二步用调试器查看 PHY 寄存器。在 main 函数里调用完 MX_LWIP_Init 之后加一个软件断点然后用 Watch 窗口查看 HAL_ETH_ReadPHYRegister(heth, PHY_BSR) 之类调用的返回值。如果返回值 bit0 为 1说明 PHY 的 link 状态已经有了硬件 OK。如果读到 0请检查网线是否连好、对端是否开启、速率协商是否正常。如果读取超时马上回头查 MDC/MDIO 的引脚配置和 PHY 地址。第三步再调试 lwIP。先用 PC 设置静态 IP 192.168.1.2连接到板子的网口PC 去 ping 192.168.1.10。如果 ping 不通打开抓包工具看是否有 ARP 请求到达板子。如果 PC 发出来的 ARP 报文板子收到了并且回复了说明以太网数据链路是通的如果板子没回 ARP问题大概率出在 lwIP 的收发路径而不是 PHY。这时候可以在 eth_rx_thread 或 low_level_output 里加打印确认中断是否进来、DMA 描述符是否被正确标记为完成。4.2 常见问题速查表现象可能原因排查方法PHY 寄存器读超时PHY 地址不对或 MDC/MDIO 电气问题核对 PHY_ADDRESS检查上拉电阻量 MDIO 波形LINK 灯不亮PHY 供电不足、复位引脚未拉高、网线或磁珠问题检查供电、复位时序换网线用示波器看晶振灯亮但 ping 不通link 线程没触发、ARP 不回、lwIP 缓冲不足打开 lwIP 调试宏在 ethernetif.c 收发函数加打印检查内存池ping 通但很慢任务优先级、中断优先级、丢包严重设置合适的 ETH 中断优先级把 tcpip_thread 优先级调高连接后跑一会卡死堆栈溢出、内存分配失败、DMA 配置错误增大任务栈和堆大小开启 FreeRTOS 栈溢出检测这张表是我几个项目中浓缩出来的基本能覆盖 80% 的首板不开局问题。后面细分的问题比如发送大数据块卡死往往是 netbuf 或 pbuf 的释放时机不对在后面的代码示例里我再说。4.3 我踩过的几个硬坑第一块自己画的 F407 LAN8720A 板子上电后 LINK 灯死活不亮。最后量到 PHY 复位引脚悬空。LAN8720A 的复位引脚如果不接上拉到复位电平内部状态机可能一直处于复位或未知状态。解决办法是加一个 10kΩ 上拉电阻把复位脚拉高或者用 MCU 的 GPIO 在初始化前拉低、再拉高实现完整复位时序。还有一次调试到很晚PC 和板子直连死活不通。后来排查发现是 PC 有线网卡要求自适应交叉/直连而 LAN8720A 的自动 MDI-X 功能在某些版型上未使能需要交换网线类型或让交换机中转。现在很多模块做了自动极性反转但这类硬件特性还是要确认。lwIP 调试宏也是个容易踩的坑。CubeMX 里如果打开了 LWIP_DEBUG但没有打开具体模块的调试开关你会看到代码里疯狂判断却没有实际打印输出。建议先开启 NETIF_DEBUG 和 ETHARP_DEBUG确认收发链路正常后再关掉。后台打印大量日志本身会影响性能尤其是中断里打印。5. 一个可直接用的 netconn TCP 服务端示例5.1 任务逻辑与代码业务代码我推荐使用 netconn API比 raw API 直观得多而且在 FreeRTOS 下线程安全。下面是一个最简单的 TCP echo 服务端板子监听 8080 端口收到什么回什么。#include lwip/api.h #include lwip/netif.h static void tcp_echo_server(void *arg) { err_t err; struct netconn *conn; struct netconn *newconn; struct netbuf *buf; LWIP_UNUSED_ARG(arg); conn netconn_new(NETCONN_TCP); if (conn NULL) { return; } err netconn_bind(conn, IP_ADDR_ANY, 8080); if (err ! ERR_OK) { netconn_delete(conn); return; } err netconn_listen(conn); if (err ! ERR_OK) { netconn_delete(conn); return; } for (;;) { err netconn_accept(conn, newconn); if (err ! ERR_OK) { continue; } while ((err netconn_recv(newconn, buf)) ERR_OK) { /* 取得 buffer 里的数据 */ void *data; u16_t len; netbuf_data(buf, data, len); /* 原样回给客户端 */ netconn_write(newconn, data, len, NETCONN_COPY); netbuf_delete(buf); } netconn_close(newconn); netconn_delete(newconn); } }这段代码里有两个容易错的地方。第一netconn_accept 返回错误时不要直接把 newconn 拿来用一定要判断 err第二收到数据后必须 netbuf_delete 清理 buf否则内存池会泄漏跑一晚内存就撑爆。netconn_write 的最后参数用 NETCONN_COPY把用户数据复制到 lwIP 内部 pbuf确保 netbuf 在发送完成前不会被释放。5.2 创建任务与优先级在 main 函数启动调度器之前用 osThreadNew 创建上面这个任务osThreadId_t tcp_echo_thread_id; const osThreadAttr_t tcp_echo_thread_attr { .name tcp_echo, .stack_size 1024, .priority osPriorityNormal, }; tcp_echo_thread_id osThreadNew(tcp_echo_server, NULL, tcp_echo_thread_attr);stack_size 这里给了 1024单位是字节。之所以要给这么大是因为 netconn API 内部有多层临时变量和消息队列的返回值处理保守一点总归没错。优先级用 osPriorityNormal 足够不需要抢占 tcpip_thread。如果你希望服务器响应更快可以把优先级提高到 osPriorityAboveNormal但要保证 tcpip_thread 优先级不低于它否则协议栈内部转包线程也可能被饿死。用 telnet 工具连接板子的 8080 端口telnet 192.168.1.10 8080输入一行文字如果能看到同样的内容回显说明 TCP 服务端已经跑通整个 lwIP 移植也宣告成功。之后不管是扩展 UDP 通信、HTTP 服务还是把数据通过 MQTT 上报云平台都可以照这个思路一层层加。个人经验里这套流程最大的价值在于把“能用”和“好用”分开先用 CubeMX 把工程搭建好再逐步把业务逻辑挂到 FreeRTOS 任务上。如果一上来就要自己手写驱动和协议栈移植调试周期会拉长好几倍。先把基础链路做通把 PHY 地址、时钟、堆栈这些容易出问题的环节挨个确认再进入协议开发你会发现自己其实比预想中更快完成一个能稳定联网的嵌入式设备。最后再分享一个小技巧调试时如果网络不稳定先把电脑防火墙关闭排除系统干扰等板子稳定后再逐项排查真正的网络问题。这样能大大减少“明明是环境问题却在代码里找了一整天”的情况。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

moto 的 AWS Config 支持:基于 ConfigQueryModel 的资源发现与配置查询实战指南 2026/9/25 3:48:15

moto 的 AWS Config 支持:基于 ConfigQueryModel 的资源发现与配置查询实战指南

Mock测试 【免费下载链接】moto A library that allows you to easily mock out tests based on AWS infrastructure. 项目地址: https://gitcode.com/gh_mirrors/mo/moto 点击查看 免费下载 导读 本文围绕 moto 仓库中 docs/docs/aws_config.rst 这一实验性特性文…

阅读更多 →
jc 解析 Common Log Format(CLF)访问日志:从正则解析到 JSON 时间戳的完整指南 2026/9/25 3:48:08

jc 解析 Common Log Format(CLF)访问日志:从正则解析到 JSON 时间戳的完整指南

开发工具 【免费下载链接】jc CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.…

阅读更多 →
Ocelot 限流(Rate Limiting)完整指南:配置 Schema、算法原理与规则分区实战 2026/9/25 3:48:08

Ocelot 限流(Rate Limiting)完整指南:配置 Schema、算法原理与规则分区实战

API网关后端微服务 【免费下载链接】Ocelot .NET API Gateway 项目地址: https://gitcode.com/gh_mirrors/oc/Ocelot 点击查看 免费下载 导读 Ocelot 作为 .NET 生态的 API 网关,内置了面向**上游请求(upstream requests)**的限…

阅读更多 →
Salt 的 Redis Cluster 外部认证令牌存储后端(salt.tokens.rediscluster)深度解析 2026/9/25 3:48:08

Salt 的 Redis Cluster 外部认证令牌存储后端(salt.tokens.rediscluster)深度解析

运维配置管理后端 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt 点击查看 免费下载 导读 本文基于当前仓库中 salt/tokens/red…

阅读更多 →
TensorRT Model Optimizer高级技巧:自定义量化策略与性能调优指南 2026/9/25 3:47:38

TensorRT Model Optimizer高级技巧:自定义量化策略与性能调优指南

TensorRT Model Optimizer高级技巧:自定义量化策略与性能调优指南 【免费下载链接】Model-Optimizer A unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc…

阅读更多 →
哈工大SSE练习39:C语言在线评测从拆题到AC的完整指南 2026/9/25 3:47:31

哈工大SSE练习39:C语言在线评测从拆题到AC的完整指南

看到标题里的“SSE”,先别急着把它跟前端那个 Server-Sent Events 对应起来。在哈工大,SSE 是同学们对 C 语言课程那个在线编程练习平台的约定俗成叫法。不管是软件学院还是计算学部的同学,大一学 C 语言基本都绕不开在这上面刷题。系统界面不…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉