当前位置: 首页 > article >正文

FuSa RTX RTOS多核支持与AMP架构解析

1. FuSa RTX RTOS多核支持解析在嵌入式安全关键系统开发领域多核处理器架构已成为提升性能的主流选择。作为Arm FuSa RTS功能安全运行时系统的核心组件FuSa RTX RTOS的多核支持能力自然成为开发者关注的焦点。本文将深入剖析其多核实现机制、技术限制以及实际工程中的应用方案。FuSa RTX RTOS本质上是Keil RTX5 RTOS经过功能安全认证的版本两者在核心架构上保持高度一致。这种认证版本通常会保留原始RTOS的核心特性同时增加满足IEC 61508或ISO 26262等安全标准所需的机制如内存保护、时间监控等安全特性。重要提示FuSa RTX RTOS与标准RTX5相同不支持单实例跨核运行模式即单个RTOS实例管理多个核心上的线程。这是由其基础架构设计决定的根本特性。1.1 多核支持的技术本质现代RTOS的多核支持通常分为两种模式对称多处理(SMP)单一RTOS实例管理所有核心资源线程可自由跨核调度非对称多处理(AMP)每个核心运行独立RTOS实例通过IPC机制通信FuSa RTX RTOS采用后者实现多核支持这种选择主要基于三个技术考量安全认证的复杂性SMP架构的共享资源管理会大幅增加认证难度故障隔离需求AMP模式天然提供核心间的错误隔离符合功能安全要求确定性行为独立实例确保每个核心的时序行为可预测2. 多核系统实现方案虽然不支持SMP模式但在满足特定硬件条件下开发者可以构建基于FuSa RTX RTOS的多核系统。这种实现需要严格遵守以下硬件和软件架构约束。2.1 硬件要求硬件组件最低要求推荐配置核心架构相同指令集相同微架构内存系统独立地址空间带硬件隔离的共享内存区域中断控制器核心间中断支持分布式中断控制器时钟系统独立时钟源同步时钟域核心间通信通常需要以下硬件支持共享内存区域带硬件保护机制核间中断(IPI)控制器硬件信号量或原子操作支持2.2 软件架构设计典型的AMP实现采用多实例管理层的架构[Core 0] [Core 1] [Core N] ┌─────────┐ ┌─────────┐ ┌─────────┐ │ FuSa RTX │ │ FuSa RTX │ │ FuSa RTX │ │ Instance │ │ Instance │ │ Instance │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ └──────────────┴──────┬───────┘ │ ┌────┴────┐ │ 协调层 │ │ (应用层)│ └─────────┘协调层需要实现以下关键功能资源分配静态划分内存、外设等硬件资源通信协议基于共享内存和核间中断的消息传递同步机制跨核信号量、屏障同步等错误处理核心故障检测与恢复3. 核心间通信实现细节在AMP架构中核心间通信(IPC)是系统设计的重中之重。以下是基于FuSa RTX RTOS的典型IPC实现方案。3.1 共享内存管理共享内存区域需要精心设计以避免竞争条件/* 共享内存区域定义示例 */ typedef struct { volatile uint32_t flag; // 使用ARMv8原子指令访问 uint8_t buffer[1024]; // 数据缓冲区 uint32_t checksum; // 数据校验和 } SharedMemoryRegion; /* 核心0写入数据 */ void Core0_SendData(SharedMemoryRegion* region, const void* data, size_t len) { while(__STREXW(1, region-flag)); // 等待锁释放 memcpy(region-buffer, data, len); region-checksum CalculateCRC32(data, len); __DMB(); // 数据内存屏障 region-flag 0; // 释放锁 SendInterrupt(CORE1_IRQ); // 触发核间中断 }安全提示共享内存访问必须包含以下保护机制原子操作或硬件锁数据完整性校验(如CRC)内存屏障指令确保可见性超时机制防止死锁3.2 核间中断同步Arm架构下的典型核间中断实现/* GIC-400中断控制器配置示例 */ void ConfigureInterCoreInterrupt(void) { // 配置核心0接收SGI 0号中断 GIC_EnableIRQ(SGI0_IRQn); NVIC_SetPriority(SGI0_IRQn, 0xF0); NVIC_EnableIRQ(SGI0_IRQn); // 配置核心1发送SGI 0号中断 GIC_SendSGI(SGI0_IRQn, (1 1), GIC_CPU_TRG_SPEC); }中断处理需要考虑优先级设置避免嵌套过深中断服务程序(ISR)尽量简短与任务上下文的数据传递机制4. 功能安全关键考量作为安全认证的RTOSFuSa RTX在多核应用中需要特别注意以下安全要素。4.1 故障检测与处理故障类型检测机制恢复策略核心挂死看门狗定时器核心复位通信超时心跳监测通道切换数据损坏CRC校验重传机制资源耗尽使用量监控优雅降级4.2 安全认证影响多核系统的认证需考虑架构级FMEA分析多核交互的故障模式干扰分析验证核心间错误传播路径时序分析最坏情况执行时间(WCET)评估测试覆盖率增加跨核场景的测试用例典型的安全措施包括核心间防火墙配置关键数据的冗余存储通信协议的端到端保护资源使用的静态分配5. 实际工程经验分享基于多个安全关键项目的实施经验以下是FuSa RTX多核应用的关键实践要点。5.1 启动顺序设计正确的核心启动顺序对系统稳定性至关重要主核初始化阶段配置共享内存区域初始化通信硬件(GIC、邮箱等)设置看门狗监控加载从核镜像到指定地址从核唤醒阶段主核通过SEV指令唤醒从核从核完成本地内存和外设初始化建立与主核的心跳机制应用启动阶段主核启动安全监控任务各核独立启动RTOS实例验证核心间通信链路5.2 调试技巧多核调试的实用方法1. 非侵入式日志系统// 带时间戳的核间安全日志 void SafeLog(uint32_t coreID, const char* msg) { static uint64_t syncTimeBase 0; uint64_t timestamp GetCycleCount() - syncTimeBase; // 使用DWT周期计数器获取精确时间 while(__STREXW(1, logLock)); printf([Core%d][%llu] %s\n, coreID, timestamp, msg); __DMB(); logLock 0; }2. 关键数据追踪使用ETM跟踪每个核心的执行流在共享内存中设置调试状态区实现基于SWO的实时数据输出3. 死锁检测策略定期检查通信标志位状态实现软件看门狗互相监控记录最后一次成功通信时间戳6. 性能优化建议多核系统的性能瓶颈通常出现在核心间通信环节以下优化手段在实践中证明有效6.1 通信协议优化批处理 vs 实时传输策略吞吐量延迟适用场景单消息中断低最低紧急事件通知批量传输最高高大数据块传输阈值触发中中平衡型应用零拷贝技术实现// 共享内存环形缓冲区实现 typedef struct { volatile uint32_t head; // 写入位置 volatile uint32_t tail; // 读取位置 uint8_t buffer[RING_SIZE]; } RingBuffer; // 生产者核心无拷贝写入 int RingBuf_Put(RingBuffer* rb, const void* data, uint32_t len) { uint32_t space (rb-head rb-tail) ? (RING_SIZE - (rb-head - rb-tail)) : (rb-tail - rb-head); if(space len sizeof(len)) return -1; // 直接写入长度和数据 uint32_t* pLen (uint32_t*)rb-buffer[rb-head % RING_SIZE]; *pLen len; void* pData rb-buffer[(rb-head sizeof(len)) % RING_SIZE]; memcpy(pData, data, len); // 实际应用可考虑避免此拷贝 rb-head len sizeof(len); return 0; }6.2 缓存一致性管理Arm多核系统的缓存优化策略共享数据标记// 定义共享数据结构时使用缓存对齐和标记 typedef struct __attribute__((aligned(64))) { volatile uint32_t flag __attribute__((shared)); uint8_t payload[60]; } SharedData;显式缓存维护// 数据生产者端 void UpdateSharedData(SharedData* sd) { // ... 更新数据 ... __DSB(); // 确保数据写入完成 __SEV(); // 唤醒其他核心 CleanDCache_by_Addr((uint32_t*)sd, sizeof(SharedData)); } // 数据消费者端 void ReadSharedData(SharedData* sd) { InvalidateDCache_by_Addr((uint32_t*)sd, sizeof(SharedData)); // ... 读取数据 ... }内存属性配置共享内存区域设置为Non-cacheable或Write-through核心私有数据使用Write-back策略通过MPU/MMU实现不同内存区域的属性设置7. 替代方案比较当FuSa RTX的AMP模式无法满足需求时开发者可考虑以下经过安全认证的多核RTOS方案解决方案认证等级SMP支持特点适用场景QNX Neutrino RTOSISO 26262 ASIL D是微内核架构汽车电子INTEGRITY RTOSDO-178C DAL A是时间分区航空航天VxWorks CertIEC 61508 SIL 3是成熟生态工业控制FreeRTOSSafeIEC 61508 SIL 3否开源基础成本敏感型选择替代方案时需要评估现有代码库的移植成本工具链兼容性认证证据包的完整性长期维护承诺8. 开发工具链配置Keil MDK环境下多核开发的特殊配置要点8.1 工程结构设计Project/ ├── Core0/ │ ├── src/ # 核心0应用代码 │ ├── fusa_config/ # 安全配置 │ └── rtx_config.c # RTOS配置 ├── Core1/ │ ├── src/ # 核心1应用代码 │ ├── fusa_config/ │ └── rtx_config.c ├── Shared/ │ ├── inc/ # 共享头文件 │ └── src/ # 公共代码 └── scripts/ ├── core0.scat # 核心0分散加载文件 └── core1.scat # 核心1分散加载文件8.2 分散加载文件示例核心0的链接脚本片段LR_CORE0 0x80000000 0x00200000 { ER_CORE0 0x80000000 0x00100000 { *.o(RESET, First) *(InRoot$$Sections) .ANY (RO RW ZI) } SHARED_RAM 0x80100000 0x00010000 { shared.o(RW ZI) } ARM_LIB_HEAP 0x80110000 EMPTY 0x00008000 {} ARM_LIB_STACK 0x80118000 EMPTY -0x00004000 {} }关键配置项严格隔离各核心的代码和数据段明确定义共享内存区域的位置和大小为每个核心分配独立的堆栈空间保留足够的隔离带(Gap)防止内存越界8.3 调试配置技巧多核调试会话在Keil MDK中创建多个Debugger实例为每个核心单独加载符号表使用系统视图(System Viewer)监控核心状态Trace配置trace core id0 enabledtrue itm port0 enabledtrue/ etm enabledtrue/ /core core id1 enabledtrue itm port1 enabledtrue/ etm enabledfalse/ /core /trace性能分析使用Event Statistics视图比较各核心的CPU利用率通过Performance Analyzer识别跨核通信瓶颈记录中断延迟和任务切换时间9. 验证与测试策略安全关键系统的多核验证需要特别设计的测试方案。9.1 单元测试框架核心间通信测试用例示例void Test_InterCoreComm(void) { // 初始化测试消息 TestMessage txMsg {.id 0xAA55, .seq 0}; TestMessage rxMsg {0}; // 核心0发送消息 Core0_Send(txMsg); // 核心1接收验证 Core1_Receive(rxMsg); // 断言验证 TEST_ASSERT_EQUAL_HEX16(0xAA55, rxMsg.id); TEST_ASSERT_EQUAL(0, rxMsg.seq); // 往返测试 txMsg.seq; Core1_Reply(txMsg); Core0_Receive(rxMsg); TEST_ASSERT_EQUAL(1, rxMsg.seq); }9.2 压力测试方案通信负载测试逐步增加消息频率直至超时记录最大可持续吞吐量测量不同负载下的延迟分布故障注入测试# 故障注入脚本示例 def inject_fault(core, fault_type): if fault_type memory_corruption: write_shared_memory(0xFFFF, random_data(128)) elif fault_type interrupt_storm: generate_interrupts(core, rate1000) monitor_system_recovery()长期稳定性测试连续运行72小时以上定期触发核心复位模拟看门狗事件监控资源泄漏情况10. 项目迁移指南将现有单核FuSa RTX项目迁移到多核环境的系统化方法。10.1 迁移步骤分解架构评估阶段识别可并行化的功能模块分析任务间的数据依赖关系确定核心间通信的频度和数据量代码重构阶段// 原单核代码 - void ProcessData(Data* d) { - Preprocess(d); - Transform(d); - Postprocess(d); - } // 多核版本 void Core0_Process(Data* d) { Preprocess(d); SendToCore1(d); } void Core1_Process(Data* d) { Transform(d); SendToCore0(d); } void Core0_Complete(Data* d) { Postprocess(d); }资源分配规划使用资源映射表明确各外设的归属核心静态分配内存区域避免动态竞争为每个核心配置独立的RTOS对象池10.2 常见问题解决问题1核心间同步导致的性能下降解决方案采用批处理减少通信次数使用无锁数据结构优化缓存一致性操作问题2共享外设访问冲突解决方案// 硬件抽象层示例 void UART_Send(CoreID core, const void* data, size_t len) { static MutexId uartMutex NULL; if(uartMutex NULL) { uartMutex osMutexNew(NULL); } osMutexAcquire(uartMutex, osWaitForever); HAL_UART_Transmit(huart1, data, len, 1000); osMutexRelease(uartMutex); }问题3安全认证影响评估重新进行FMEA分析新增的故障模式更新安全手册中的架构描述增加多核特定的测试用例在实际项目中采用增量迁移策略往往最为稳妥——先迁移非关键功能验证架构再逐步转移核心算法同时持续运行回归测试确保功能完整性。这种渐进式方法虽然耗时较长但能有效控制风险特别适合已经通过认证的现有项目升级。

相关文章:

FuSa RTX RTOS多核支持与AMP架构解析

1. FuSa RTX RTOS多核支持解析 在嵌入式安全关键系统开发领域,多核处理器架构已成为提升性能的主流选择。作为Arm FuSa RTS(功能安全运行时系统)的核心组件,FuSa RTX RTOS的多核支持能力自然成为开发者关注的焦点。本文将深入剖析…...

Windows 11硬件限制绕过终极指南:3种实用方法让老电脑轻松升级

Windows 11硬件限制绕过终极指南:3种实用方法让老电脑轻松升级 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool的核心玩法

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool的核心玩法 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…...

别再被离群点坑了!用Python+OpenCV手把手教你RANSAC直线拟合(附完整代码)

实战指南:用PythonOpenCV实现RANSAC直线拟合的完整流程在计算机视觉项目中,我们经常遇到需要从嘈杂数据中提取几何特征的情况。想象一下这样的场景:你从一张建筑图纸扫描件中提取了数百个边缘点,但扫描时的折痕、污渍导致30%的点位…...

终极教程:如何用免费Chrome插件一键保存完整网页内容

终极教程:如何用免费Chrome插件一键保存完整网页内容 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extens…...

MacType 2025:3大突破性改进让Windows字体渲染焕然一新

MacType 2025:3大突破性改进让Windows字体渲染焕然一新 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 还在为Windows系统下字体模糊、边缘粗糙而烦恼吗?MacType 2025版本带…...

别再手动筛图了!用OpenCV拉普拉斯方差法,5分钟搞定图像模糊度自动检测

告别低效筛选:基于OpenCV的智能图像模糊检测实战指南在数字图像处理领域,模糊检测一直是影响自动化流程的关键瓶颈。无论是电商平台的商品图片审核,还是摄影作品集的初筛,传统人工肉眼判断的方式不仅效率低下,更难以保…...

别再只用体素网格了!PCL点云降采样实战:4种方法对比与选型指南(附Python/Open3D代码)

点云降采样实战指南:4种核心方法深度解析与工程选型点云数据处理中,降采样往往是预处理环节的关键一步。面对海量的三维点云数据,如何在不丢失重要几何特征的前提下,有效减少数据量?这直接关系到后续算法的效率和精度。…...

023、PCB设计软件选择与安装(Altium Designer)

023、PCB设计软件选择与安装(Altium Designer) 从一块烧掉的板子说起 去年冬天,我接手一个同事离职留下的项目——一块四层板的电机驱动板。原理图看着没问题,Layout也走通了,打样回来上电,MOS管直接冒烟。排查三天,最后发现是电源回路的地线回流路径被一根细长的走线…...

2026年电工杯AB题|基础可冲!免费参赛 + 高含金量,保研 / 综测加分必看!重磅更新|独家原创|Python|Matlab代码|数学建模|论文|

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

如何快速获取网盘直链:LinkSwift 下载助手配置指南

如何快速获取网盘直链:LinkSwift 下载助手配置指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...

jvm垃圾回收器 - G1详解

G1垃圾收集器发展史与工作原理 G1(Garbage First,垃圾优先)收集器是JVM垃圾收集技术发展史上的里程碑之作,它开创了面向局部收集的设计思路和基于Region的内存布局形式,定位为CMS收集器的替代者和继承人。一、发展史 1…...

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool核心技巧

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool核心技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...

jdk1.7 HashMap为什么会出现死循环

JDK 1.7 的 HashMap出现死循环的条件 JDK 1.7 的 HashMap 在多线程并发环境下,如果同时触发扩容操作,就可能会因为其采用的头插法机制而产生一个环形链表,导致程序在调用 get() 等方法时陷入死循环。 JDK 1.7的HashMap在设计上并非线程安全&a…...

基于开源大模型的自动化定性分析:GATOS工作流实践指南

1. 项目概述:当定性研究遇上开源大模型如果你做过定性研究,比如分析访谈记录、开放式问卷反馈或者社交媒体评论,你肯定对“主题分析”和“编码”这两个词又爱又恨。爱的是,它能让你从海量文本中提炼出深刻的、人性化的洞察&#x…...

从零开发游戏需要学习的c#模块,第二十二章(音效与背景音乐)

本节课学习目标 加载并播放背景音乐(循环) 收集金币时播放音效 碰到敌人时播放音效 用 MonoGame 内置音频系统实现 第一步:准备音频文件 去这些网站下载免费音效: freesound.org opengameart.org mixkit.co 需要三个文件…...

TranslucentTB:Windows任务栏透明化终极解决方案与高级配置指南

TranslucentTB:Windows任务栏透明化终极解决方案与高级配置指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentT…...

解锁AMD Ryzen隐藏性能:一款开源调试工具如何让你成为硬件调优高手

解锁AMD Ryzen隐藏性能:一款开源调试工具如何让你成为硬件调优高手 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...

BetterGI原神自动化工具:5分钟快速上手指南,解放你的游戏时间

BetterGI原神自动化工具:5分钟快速上手指南,解放你的游戏时间 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条…...

OpenAI大神教你如何榨干Codex

闻乐 发自 凹非寺量子位 | 公众号 QbitAI新晋员工确实毫无保留。Jason Liu,13k星开源库Instructor的作者,刚被OpenAI招进Codex团队没多久,不仅在社交平台大方发API额度;还写了篇Codex-maxxing,把自己的Codex玩法全抖出…...

arXiv开始拒收综述,CS新人发论文得找人背书

一水 发自 凹非寺量子位 | 公众号 QbitAI坏了!在arXiv发综述的门,已经被关上了。arXiv接收门槛收紧后,最新受害者已急哭:arXiv的审核越来越严格了。综述论文已经不再被允许发表了,计算机科学领域彻底完蛋了&#xff0c…...

DeepSeek V4价格打骨折,宁王京东网易抢着入场,梁文锋:目标是AGI

听雨 发自 凹非寺量子位 | 公众号 QbitAI同一天,DeepSeek又发生两件大事。一边,DeepSeek-V4-Pro API宣布永久降价。从 6月1日起,V4 Pro的API价格将正式调整为当前促销价,不再恢复原价。另一边,The Information爆料&…...

刚刚,马斯克第三代星舰首飞成功!

克雷西 发自 凹非寺量子位 | 公众号 QbitAI刚刚,马斯克的第十二次星舰试验,也是第三代星舰的首次飞行,顺利完成!当地时间昨天下午5点30分(北京时间今早6点30分),33台猛禽3发动机同时点火&#x…...

Steam创意工坊模组下载终极指南:WorkshopDL跨平台模组自由教程

Steam创意工坊模组下载终极指南:WorkshopDL跨平台模组自由教程 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为Epic Games或GOG平台上的游戏无法使用Steam创意…...

VMware Workstation Pro 17免费许可证密钥完整指南:快速激活专业虚拟化工具

VMware Workstation Pro 17免费许可证密钥完整指南:快速激活专业虚拟化工具 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major …...

HAR模型调优实战:为何精心调优的线性模型能击败复杂机器学习?

1. 项目概述:当HAR模型遇上机器学习,一场关于“调优”的较量在金融计量和量化交易领域,预测明天的市场波动率,就像试图预测一场风暴的强度,充满了挑战但也至关重要。无论是为了给衍生品定价、管理投资组合风险&#xf…...

算法公平性评估:如何用自洽性与方差分析区分真实偏见与随机噪声

1. 项目概述:为什么我们需要关注算法评估中的“噪声”?在算法公平性研究领域,我们常常看到这样的结论:“模型在A群体上的误报率(FPR)比B群体高X个百分点,因此存在不公平。” 然而,作…...

模型不确定性下的公平性评估:自一致性指标与集成弃权策略

1. 项目概述:当公平性评估遭遇模型不确定性在机器学习,尤其是公平性评估这个领域,我们常常会陷入一种“确定性幻觉”。我们训练一个模型,在某个测试集上计算其误判率、假阳性率、假阴性率,然后得出一个结论&#xff1a…...

如何快速提升电脑性能:5个终极系统调优技巧指南

如何快速提升电脑性能:5个终极系统调优技巧指南 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是否遇到过这样的…...

魔兽争霸3终极优化指南:5分钟解决画面拉伸、帧率限制与中文兼容问题

魔兽争霸3终极优化指南:5分钟解决画面拉伸、帧率限制与中文兼容问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏魔兽争…...