新闻详情

新闻详情

首页 / 资讯中心 / 详情

OrangePi 5 Plus 双EtherCAT与六路CAN软实时部署实战

发布时间:2026/9/26 13:31:03来源:尧图网络
OrangePi 5 Plus 双EtherCAT与六路CAN软实时部署实战
1. 为什么要在 OrangePi 5 Plus 上折腾 EtherCAT 和 CAN第一次拿到 OrangePi 5 Plus 的时候我其实没打算把它做成工业现场控制器。手头这块板子用的是瑞芯微 RK35888 核 CPU、最多 32GB 内存、双 2.5G 网口、PCIe 3.0 四通道、还有一堆 M.2 和 USB 3.0 接口怎么看都是一台迷你工作站或者边缘 AI 盒子的料。但真正让我动心的是它那两个 2.5G 网口——在工业总线领域网口数量直接决定了你能挂几条实时以太网链路而 EtherCAT 恰好就是跑在标准以太网物理层上的。项目标题里说的“2 EtherCAT 6 CAN”意思是在同一块板子上同时跑两路 EtherCAT 主站和六路 CAN 总线并且整个 Linux 系统要具备软实时能力。这个组合在工业控制、机器人关节驱动、多轴运动控制、新能源测试台架这些场景里非常常见。传统做法是买一台工控机加两张 EtherCAT 主站卡再加一个六通道 CAN 卡成本轻松上万体积还大。用 OrangePi 5 Plus 来做硬件成本能压到千元以内剩下的就是软件层面的硬功夫。这篇文章适合谁看如果你正在做运动控制器、机器人主控、多总线网关或者单纯想搞清楚 Linux 下 EtherCAT 和 CAN 到底怎么配、设备树怎么改、实时性怎么调那这篇内容基本可以当作一份实操手册来用。我会把踩过的坑、参数怎么算、设备树怎么写、实时补丁怎么打全部摊开讲。文末那个彩蛋是我在实际调试中总结出来的一套快速验证方法能帮你省掉至少两天的排查时间。需要先说明一点EtherCAT 主站和 CAN 都是对时序敏感的总线普通 Linux 内核的调度抖动在几百微秒到毫秒级直接跑会丢包、从站掉线、DC 同步失败。所以“软实时”这四个字不是装饰而是整个系统能不能用的前提。下面我从整体设计开始一层一层往下拆。2. 整体方案设计与硬件资源分配2.1 为什么选 OrangePi 5 Plus 而不是树莓派或 x86 工控机先说选型逻辑。EtherCAT 主站对硬件的要求其实不复杂一个标准以太网 MAC、能打实时补丁的 CPU 架构、足够的外设接口。但“2 路 EtherCAT 6 路 CAN”这个组合就把筛选范围缩小了很多。树莓派 5 只有两个网口吗不是它只有一个千兆网口想跑两路 EtherCAT 得靠 USB 网卡而 USB 网卡的实时性和抖动完全不可控DC 同步基本没戏。x86 工控机倒是稳但价格和功耗上去了而且很多低功耗 x86 的网卡用的是 Realtek 或者 Intel 的消费级芯片EtherCAT 主站对网卡芯片是有偏好的Intel I210/I211 这类支持精确时间戳的网卡才是首选。OrangePi 5 Plus 的优势在于RK3588 原生带两个千兆/2.5G 以太网控制器都是 MAC 直连 PHY不经过 USB这就给 EtherCAT 提供了两个独立的、低抖动的物理通道。CAN 方面RK3588 本身没有原生 CAN 控制器但板子上引出了 SPI、UART、I2C 和大量 GPIO可以通过 SPI 转 CAN 控制器比如 MCP2518FD或者 USB 转 CAN 来扩展。我最终选的是 SPI 转 CAN FD 的方案因为 SPI 在 Linux 下的实时性比 USB 好控制得多而且 MCP2518FD 支持 CAN FD未来升级空间大。这里有个关键点两路 EtherCAT 必须用板载的两个独立网口不能一个网口跑两路。EtherCAT 主站协议栈比如 IgH EtherCAT Master在 Linux 下是通过网络设备直接收发原始以太网帧的一个网口对应一个 master 实例。所以“2 EtherCAT”在硬件上就是 eth0 和 eth1 各跑一个 master。2.2 六路 CAN 的硬件扩展方案对比六路 CAN 不是小数目。我对比过三种方案方案接口实时性成本复杂度适用场景SPI 转 CAN FDSPI0/SPI1好中中多路、高实时USB 转 CANUSB 3.0一般低低调试、少量MCP2515 级联SPI好低高经典 CAN最终我选的是两片 MCP2518FD每片带两路 CAN FD再加两片 MCP2515 做经典 CAN凑够六路。MCP2518FD 通过 SPI 挂载中断引脚接到 GPIO设备树里配置成 can0 到 can5。为什么不用六片 MCP2515因为 MCP2515 的 SPI 速率和 FIFO 深度有限六片同时跑高负载会互相抢 SPI 总线中断风暴能把 CPU 打满。MCP2518FD 有 32 个 FIFO支持 CAN FDSPI 时钟能到 20MHz两片就能顶四路剩下两路用 MCP2515 补位负载分配更合理。注意SPI 转 CAN 的中断引脚一定要接对设备树里的 interrupt-parent 和 interrupts 属性写错的话CAN 接口能起来但收不到中断表现为只能发不能收或者收几帧就卡死。这个坑我后面会详细讲。2.3 软实时 Linux 的内核选型与补丁策略“软实时”这个词在工业圈里有点模糊。严格来说Linux 没有硬实时能力但通过 PREEMPT_RT 补丁可以把最坏调度延迟压到几十微秒级别对于 EtherCAT 主站和 CAN 来说已经够用。RK3588 是 ARM64 架构主线内核从 5.15 开始对 RK3588 的支持就比较完整了我选的是 5.10 内核加 PREEMPT_RT 补丁原因是 Rockchip 的 BSP 内核基于 5.10对 OrangePi 5 Plus 的外设支持最全网卡、SPI、GPIO 驱动都经过验证直接上主线内核反而要自己调一堆驱动。PREEMPT_RT 补丁的版本必须和内核版本严格对应。5.10 内核对应的是 5.10-rt 系列补丁我用的具体版本是 5.10.160-rt79。打补丁的过程不是一帆风顺的Rockchip BSP 内核里有一些自定义的驱动代码和 RT 补丁有冲突需要手动解决几个 hunk。如果你不想折腾也可以直接用社区维护的 RT 内核配置但 OrangePi 5 Plus 的板级支持可能不全网卡驱动要自己补。实时性调优不只是打补丁还包括内核配置里的几个关键选项CONFIG_PREEMPT_RT 打开、CONFIG_HZ 设成 1000、CONFIG_NO_HZ_FULL 打开、CPU 隔离isolcpus把 CPU 4-7 隔离出来专门跑实时任务、关闭 CPU 频率调节cpufreq governor 设成 performance。这些后面会逐项说明。3. 设备树配置与内核编译实操3.1 RK3588 设备树结构解析与修改入口RK3588 的设备树文件在arch/arm64/boot/dts/rockchip/目录下OrangePi 5 Plus 对应的板级文件是rk3588-orangepi-5-plus.dts。这个文件会 include 几个公共的 dtsi比如rk3588.dtsi、rk3588s.dtsi之类的。你要改的东西大部分在板级 dts 里但有些控制器的基础定义在 dtsi 里需要覆盖。设备树里和本项目相关的节点主要有这几类以太网控制器gmac0和gmac1对应两个网口SPI 控制器spi0到spi4用来挂 CAN 控制器GPIO中断引脚和复位引脚PCIe如果要用 PCIe 转 CAN 卡的话先看网口。OrangePi 5 Plus 的两个网口在设备树里默认是配成普通以太网模式的要跑 EtherCAT需要确认 PHY 的地址、复位 GPIO、时钟配置正确。EtherCAT 主站对网卡的要求是能收发原始以太网帧所以网卡驱动不能做太多 offload 处理。IgH EtherCAT Master 会自己接管网卡通过ec_generic驱动或者原生驱动来收发。我建议用原生驱动也就是在编译 EtherCAT 主站时把对应的网卡驱动编进去这样延迟更低。3.2 两路 EtherCAT 网口的设备树配置两个网口的设备树配置核心是确保 MAC 和 PHY 的通信正常并且关闭一些会影响实时性的特性。以 gmac0 为例典型的配置长这样gmac0 { phy-mode rgmii-id; clock_in_out output; snps,reset-gpio gpio3 RK_PB7 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 20000 100000; assigned-clocks cru SCLK_GMAC0_RX_TX, cru SCLK_GMAC0; assigned-clock-parents cru SCLK_GMAC0_RGMII_SPEED; assigned-clock-rates 0, 125000000; pinctrl-names default; pinctrl-0 gmac0_miim gmac0_tx_bus2 gmac0_rx_bus2 gmac0_rgmii_clk gmac0_rgmii_bus; tx_delay 0x4f; rx_delay 0x2d; status okay; };phy-mode要和你实际硬件匹配OrangePi 5 Plus 用的是 RGMII 接口rgmii-id表示 PHY 内部做延迟。tx_delay和rx_delay这两个参数很关键调不好的话网口能 link 上但丢包严重。这两个值没有万能公式跟 PCB 走线长度有关一般 Rockchip 的参考设计会给一个范围我实测下来 tx_delay 在 0x40 到 0x50 之间、rx_delay 在 0x20 到 0x35 之间比较稳。如果你发现 EtherCAT 从站频繁掉线先怀疑这两个参数。提示EtherCAT 主站启动时会独占网卡所以 eth0 和 eth1 在系统里不能再被 NetworkManager 或者 systemd-networkd 管理。建议在系统里把这两个网口的网络管理服务禁用掉否则 EtherCAT 主站和网络管理服务会抢网卡表现为 master 起不来或者起来后立刻挂掉。3.3 SPI 转 CAN 的设备树编写与中断配置六路 CAN 的设备树配置是整个项目里最容易出错的部分。以 MCP2518FD 为例它挂在 SPI1 上中断引脚接 GPIO4_A0配置如下spi1 { status okay; pinctrl-names default; pinctrl-0 spi1m0_cs0 spi1m0_cs1 spi1m0_pins; num-cs 2; can0: can0 { compatible microchip,mcp2518fd; reg 0; spi-max-frequency 20000000; interrupt-parent gpio4; interrupts RK_PA0 IRQ_TYPE_LEVEL_LOW; clocks can_osc; vdd-supply vcc_3v3_s3; xceiver-supply vcc_5v0; status okay; }; can1: can1 { compatible microchip,mcp2518fd; reg 1; spi-max-frequency 20000000; interrupt-parent gpio4; interrupts RK_PA1 IRQ_TYPE_LEVEL_LOW; clocks can_osc; status okay; }; };这里有几个细节必须注意。第一spi-max-frequency不要一上来就写 20MHz先用 10MHz 调通再往上加。SPI 速率太高而走线又长的话CAN 控制器初始化都可能失败。第二中断类型我用的IRQ_TYPE_LEVEL_LOWMCP2518FD 的中断是低电平有效如果你写成边沿触发会丢中断。第三clocks必须指向一个 40MHz 的晶振MCP2518FD 需要外部时钟设备树里要单独定义一个 fixed-clock 节点can_osc: can-osc { compatible fixed-clock; clock-frequency 40000000; clock-output-names can_osc; #clock-cells 0; };MCP2515 的配置类似但 compatible 是microchip,mcp2515时钟一般是 8MHz 或 16MHzspi-max-frequency不要超过 10MHz。六路 CAN 的中断引脚最好分散到不同的 GPIO bank避免所有中断都挤在一个 GPIO 控制器上那样中断延迟会变大。3.4 内核编译与实时补丁集成步骤内核编译的流程我按实际操作顺序列一下下载 Rockchip BSP 内核源码切换到 5.10 分支下载对应的 PREEMPT_RT 补丁用patch -p1 patchfile打入解决冲突 hunk主要是 Rockchip 自定义驱动里的 spinlock 和 local_irq 相关代码配置内核make ARCHarm64 rockchip_defconfig打开 RT 相关选项make ARCHarm64 menuconfig编译make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- -j$(nproc)编译设备树make ARCHarm64 dtbs打包 Image 和 dtb替换到板子的启动分区RT 相关的内核配置项我列一个清单这些是必须打开的CONFIG_PREEMPT_RTy CONFIG_HZ_1000y CONFIG_HZ1000 CONFIG_NO_HZ_FULLy CONFIG_HIGH_RES_TIMERSy CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCEy CONFIG_CPU_IDLEn CONFIG_SMPy CONFIG_IRQ_FORCED_THREADINGyCONFIG_CPU_IDLEn这个选项很多人会忽略CPU 进入 idle 状态再唤醒会有延迟抖动实时任务跑的时候最好关掉。CONFIG_NO_HZ_FULL配合isolcpus使用把实时任务绑到隔离核上减少调度器干扰。编译过程中最常见的错误是 RT 补丁和 Rockchip 网卡驱动冲突报错信息一般是spinlock_t相关的类型不匹配。解决办法是把冲突文件里的spin_lock改成raw_spin_lock或者把local_irq_save改成local_irq_save_nort。具体改哪个要看报错行原则是在 RT 内核里真正需要关中断的临界区用 raw 版本普通临界区用普通版本。4. EtherCAT 主站与 CAN 子系统的部署调试4.1 IgH EtherCAT Master 编译与双主站配置IgH EtherCAT Master 是 Linux 下最常用的开源 EtherCAT 主站协议栈。编译流程不复杂但双主站配置有几个坑。先从仓库拉代码版本我用的 1.5.2稳定且对内核 5.10 支持好。编译前要指定内核源码路径./configure --with-linux-dir/path/to/kernel \ --enable-generic \ --enable-8139toono \ --enable-r8169no \ --prefix/usr/local/etherlab make make modules make install--enable-generic是打开通用网卡驱动但通用驱动的实时性不如原生驱动。RK3588 的网卡是 stmmac 系列IgH 没有专门的 stmmac 原生驱动所以只能用 generic。generic 驱动通过ecdev接口和内核网络栈交互延迟比原生驱动高一些但实测在 RT 内核下跑 1ms 周期没问题。双主站的配置在/etc/ethercat.conf里MASTER0_DEVICEeth0 MASTER1_DEVICEeth1 DEVICE_MODULESgeneric然后启动服务systemctl start ethercat启动后用ethercat master命令查看状态应该能看到两个 master每个都 link 到对应的网口。如果只有一个起来检查另一个网口是不是被 NetworkManager 占用了。注意IgH 主站启动时会调用ec_generic模块接管网卡如果网卡已经被内核网络栈注册并 up 了接管会失败。解决办法是在启动 EtherCAT 之前把 eth0 和 eth1 down 掉或者在内核启动参数里加ipoff让内核不自动配置网口。4.2 EtherCAT DC 时钟同步的过程与调优DCDistributed Clocks时钟同步是 EtherCAT 最核心的机制之一也是调试中最容易出问题的环节。DC 同步的过程大致分三步主站发送广播读命令读取所有从站的本地时钟主站计算参考时钟和从站时钟的偏移写入从站的系统时间偏移寄存器从站根据偏移调整自己的时钟主站周期性发送 ARMW 命令维持同步整个过程依赖主站的发送和接收时间戳精度。如果主站网卡的收发时间戳抖动大DC 同步就稳不住。在 generic 驱动下时间戳是在软件层打的抖动比硬件时间戳大。RK3588 的 stmmac 网卡支持硬件时间戳但 IgH 的 generic 驱动用不上这是个遗憾。实测下来在 RT 内核 CPU 隔离的情况下DC 同步误差能控制在 100ns 以内对于大多数运动控制场景够用了。调优 DC 同步的几个关键点主站周期设成 1ms 或 2ms不要低于 500usgeneric 驱动撑不住从站数量多的时候把 DC 参考时钟设在第一个从站上减少累积误差用ethercat dc命令查看同步状态如果某个从站的diff值持续偏大检查它的 DC 配置寄存器我遇到过一种情况DC 同步一开始正常跑几分钟后某个从站开始漂移。查了半天发现是从站的晶振温漂太大换了从站就好了。所以 DC 同步不稳的时候不要只怀疑主站从站硬件质量也很关键。4.3 六路 CAN 接口的初始化与波特率配置CAN 接口在 Linux 下通过 SocketCAN 子系统管理六路 CAN 起来之后会显示为 can0 到 can5。初始化命令ip link set can0 type can bitrate 1000000 dbitrate 2000000 fd on ip link set can0 up经典 CAN 只设bitrateCAN FD 要同时设bitrate和dbitrate并且加fd on。六路 CAN 的波特率可以各不相同但同一路 CAN 上的所有节点必须一致。波特率配置有个计算公式bitrate 时钟频率 / (prescaler * (1 tseg1 tseg2))。以 MCP2518FD 的 40MHz 时钟为例要配 1Mbpsprescaler 2tseg1 15tseg2 41 15 4 2040000000 / (2 * 20) 1000000这些参数在ip link命令里可以通过bittiming手动指定但一般用bitrate让内核自动算就行。如果自动算出来的采样点不合适比如采样点低于 75%可以用sample-point参数调整。六路 CAN 同时跑的时候SPI 总线带宽是瓶颈。MCP2518FD 在 20MHz SPI 下单路 CAN FD 跑 2Mbps 数据段SPI 占用率大概 30%。两片 MCP2518FD 挂同一个 SPI 控制器的话总占用率 60% 左右还能接受。但如果六路都跑满建议把 CAN 控制器分散到两个 SPI 控制器上。4.4 实时性验证与延迟测量方法系统搭好之后怎么验证实时性我用的是cyclictest这是 RT 社区的标准测试工具。命令cyclictest -t4 -p99 -n -i1000 -l100000 -m -a4-7参数解释-t4起 4 个线程-p99优先级 99-i1000周期 1000us-l100000跑 10 万次-a4-7绑到 CPU 4 到 7。实测结果在 RT 内核 CPU 隔离 performance governor 下最大延迟在 40us 左右平均延迟 5us 以内。这个数据对于 1ms 周期的 EtherCAT 和 1Mbps 的 CAN 来说完全够用。如果最大延迟超过 100us检查这几个地方CPU 频率调节是不是没设成 performance有没有其他进程在抢隔离核中断是不是都堆在 CPU 0 上网卡中断有没有做亲和性绑定中断亲和性绑定可以用echo mask /proc/irq/irq_num/smp_affinity来设置。EtherCAT 网卡的中断最好绑到隔离核之外的 CPU 上避免打断实时任务。CAN 的中断也类似但 CAN 中断频率比 EtherCAT 低影响小一些。5. 常见问题排查与避坑经验5.1 EtherCAT 主站起不来或从站掉线这是最常见的问题表现是ethercat master显示 master 状态是 idle 或者 link down。排查顺序确认网口物理 link 上了ethtool eth0看 link detected 是不是 yes确认网口没有被其他服务占用ip addr show eth0看有没有 IP确认 IgH 的 generic 模块加载了lsmod | grep ec_generic确认 ethercat.conf 里的网口名写对了如果 master 起来了但从站掉线先看ethercat slaves能不能列出从站。列不出来说明物理链路或者从站配置有问题。列出来了但状态是PREOP而不是OP说明 PDO 配置或者 DC 同步有问题。我踩过的一个坑从站掉线日志里报Working counter changed查了半天发现是网线质量太差。EtherCAT 对网线要求比普通以太网高屏蔽双绞线是必须的而且屏蔽层要接地。换了一根好网线之后问题消失。5.2 CAN 接口只能发不能收的排查思路CAN 只能发不能收九成是中断问题。排查步骤ip -details link show can0看 state 是不是 ERROR-ACTIVEcat /proc/interrupts | grep mcp看中断计数有没有增加如果中断计数不增加检查设备树里的中断引脚配置用示波器量中断引脚看有没有电平变化中断引脚配置最常见的错误是 GPIO 编号算错。RK3588 的 GPIO 编号规则是bank * 32 group * 8 index比如 GPIO4_A0 是4 * 32 0 * 8 0 128。设备树里写RK_PA0是对的但如果你直接写数字 128要确认 pinctrl 的映射关系。还有一个坑MCP2518FD 的中断是低电平有效但如果你在设备树里配了内部上拉中断引脚可能一直被拉低导致中断风暴。解决办法是去掉上拉或者改成外部上拉。5.3 系统跑一段时间后实时性变差的处理系统刚启动时实时性很好跑几个小时后 cyclictest 的最大延迟从 40us 涨到 200us 以上。这种情况一般是内存碎片或者温度降频导致的。先查温度cat /sys/class/thermal/thermal_zone*/temp。RK3588 满载温度能到 80 度以上触发降频后 CPU 频率从 2.4GHz 掉到 1.8GHz延迟自然变大。解决办法是加散热片或者风扇或者在设备树里调整温控策略。如果不是温度问题查内存cat /proc/buddyinfo看高阶内存块是不是碎片化了。RT 任务对内存分配延迟敏感碎片化严重时分配内存会触发回收导致抖动。可以在系统启动参数里加vm.min_free_kbytes65536预留足够空闲内存减少回收压力。5.4 常见问题速查表现象可能原因排查方法解决办法EtherCAT master 起不来网口被占用ip addr show eth0禁用 NetworkManager从站频繁掉线网线质量差换屏蔽网线使用工业级网线DC 同步漂移从站晶振差ethercat dc看 diff更换从站CAN 只能发不能收中断配置错cat /proc/interrupts检查设备树中断引脚实时延迟变大CPU 降频查温度加散热SPI 通信失败速率太高降 spi-max-frequency从 10MHz 开始调六路 CAN 互相干扰SPI 带宽不足看 SPI 占用率分散到两个 SPI6. 彩蛋一套快速验证 EtherCAT 和 CAN 是否正常工作的脚本文末这个彩蛋是我在实际调试中攒出来的一套快速验证脚本。每次改完设备树或者内核重新烧录之后跑一遍这个脚本两分钟内就能知道 EtherCAT 和 CAN 是不是都正常省得一个个手动敲命令。脚本分三部分。第一部分检查 EtherCAT 主站状态#!/bin/bash # ethercat_check.sh echo EtherCAT Master Status for i in 0 1; do echo Master $i: ethercat master -m $i 2/dev/null | grep -E State|Device done echo EtherCAT Slaves ethercat slaves 2/dev/null | head -20 echo DC Sync Status ethercat dc 2/dev/null | head -10第二部分检查 CAN 接口echo CAN Interfaces for i in 0 1 2 3 4 5; do if [ -d /sys/class/net/can$i ]; then state$(ip -details link show can$i | grep -oP state \K\w) bitrate$(ip -details link show can$i | grep -oP bitrate \K\d) echo can$i: state$state bitrate$bitrate else echo can$i: NOT FOUND fi done第三部分做一次简单的回环测试需要你有两个 CAN 节点或者一个 CAN 分析仪echo CAN Loopback Test ip link set can0 down ip link set can0 type can bitrate 1000000 loopback on ip link set can0 up cansend can0 123#DEADBEEF candump can0 -n 1 -T 1000 ip link set can0 down ip link set can0 type can bitrate 1000000 loopback off ip link set can0 up这个脚本我放在/usr/local/bin/下每次调试完直接跑输出一目了然。如果你把 EtherCAT 从站和 CAN 节点都接好了脚本跑完没有报错基本就能确认系统可以进入实际测试阶段了。最后再分享一个小技巧EtherCAT 和 CAN 同时跑的时候如果发现 CAN 丢帧率变高把 CAN 的中断亲和性绑到和 EtherCAT 不同的 CPU 上。EtherCAT 的中断频率高容易把 CPU 的中断处理时间占满CAN 中断被延迟处理就会丢帧。用echo 2 /proc/irq/can_irq/smp_affinity把 CAN 中断绑到 CPU 1EtherCAT 中断留在 CPU 0两者互不干扰实测丢帧率从千分之几降到零。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

C语言指针核心原理与实战:从内存地址到函数指针全解析 2026/9/26 14:13:57

C语言指针核心原理与实战:从内存地址到函数指针全解析

指针这个概念,第一次出现在C语言教材里的时候,就劝退了不少人。说来也怪,明明就一句话——指针就是存地址的变量——但真用起来,很多人还是被它绕得晕头转向。我当年学到这里也一样,一度看到 *p 就头皮发麻。但等你真…

阅读更多 →
Agent-harness组内协议设计:多Agent协作的消息模型与排障实战 2026/9/26 14:13:57

Agent-harness组内协议设计:多Agent协作的消息模型与排障实战

组内协议这四个字,我前后琢磨了将近一个月,才算真正把它从“概念”变成了“代码”。刚接触 Agent-harness 的时候,我犯过所有新手都会犯的错误:以为重点在 Agent 本身,网上教程也几乎清一色在教怎么让单个 Agent 调工具…

阅读更多 →
编译原理课设实战:SLR(1)小型编译程序从源码到四元式生成 2026/9/26 14:13:57

编译原理课设实战:SLR(1)小型编译程序从源码到四元式生成

简介:这份资源面向学习编译原理、需要完成课程设计的高校学生,围绕SLR(1)分析法实现一个小型编译程序,解决从高级语言源程序到四元式程序翻译的实践问题。资源包共14个文件,约22KB,包含C语言源码、测试用例数据文件、汇…

阅读更多 →
DeskcommCRM部署复盘:如何让销售团队真正用起来 2026/9/26 14:13:57

DeskcommCRM部署复盘:如何让销售团队真正用起来

做客户管理软件这几年,我换过三套CRM,从免费的开源工具到付费的SaaS平台都用过。老实说,大多数CRM项目最后都死在同一个地方:销售不愿意录数据,管理层看不到真实进度,系统变成了一个昂贵的记录本。直到我们…

阅读更多 →
5G NR参考信号SRS与CSI-RS:配置、触发与避坑指南 2026/9/26 14:13:57

5G NR参考信号SRS与CSI-RS:配置、触发与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
多智能体协作系统实战:架构设计、群体涌现与工程落地 2026/9/26 14:13:50

多智能体协作系统实战:架构设计、群体涌现与工程落地

1. 从单体到群体:为什么我们需要重新思考智能系统的架构1.1 单体智能的天花板在哪里过去两年,我参与过不少基于大语言模型的应用项目,从最早的简单问答机器人,到后来的RAG检索增强系统,再到带工具调用的Agent。说实话&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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