发布时间:2026/9/2 13:40:08
RVCT31.rar与现代C/C++开发环境配置:从ARM工具链到MinGW-w64实战 简介本资源为ARM官方RealView编译工具链RVCT 3.1完整安装包面向嵌入式系统开发者、ARM平台固件工程师及高校相关课程实践者专用于C/C语言在ARMv4–ARMv7架构含Thumb/Thumb-2指令集上的高效编译、链接与调试。压缩包共420个文件涵盖121个目标文件.o/.b、121个汇编源码.s/.l、69个头文件.h、24个C源码.cc及大量标准库头文件如 、 、 等辅以可执行工具.exe、映射文件.map、配置文档.doc及Flexlm许可证管理组件总大小44.75MB。已有313人学习下载资源附带《RVCT31_README.doc》详细安装指南与配置说明并包含RVCT_EAT扩展工具模块支持嵌入式应用开发全流程——从环境搭建、交叉编译到性能分析与授权管理是构建ARM裸机程序、Bootloader或RTOS底层驱动的可靠工具基础。1. 项目概述RVCT31.rar 与 C/C 开发环境的深度关联最近在整理一些老项目的源码时又翻出了那个熟悉的压缩包RVCT31.rar。对于很多从功能机时代走过来的嵌入式开发者尤其是深耕 ARM 平台的同行来说这个名字背后承载的是一段特定的技术记忆。它不是一个普通的 C/C 编译器而是 ARM RealView Compilation Tools (RVCT) 3.1 版本的安装包曾经是 ARM7/ARM9/ARM11 时代特别是 Symbian、Windows Mobile 等平台原生应用和底层驱动开发的“官方指定”工具链。今天我们不再是为了怀旧而讨论它而是从一个更实际的角度出发当我们手头只有这样一个历史遗留的工具包或者需要维护、复现一个依赖它的老项目时如何在现代开发环境中比如 Windows 11 VS Code搭建起一套可用的 C/C 交叉编译环境并理解其与现代通用工具链如 MinGW-w64的本质区别。这不仅是技术上的“考古”更是解决实际兼容性问题的硬核技能。简单来说这个主题探讨的是“旧工具链在新环境下的重生与适配”。它适合以下几类朋友需要维护或逆向分析老旧 ARM 嵌入式项目的工程师对编译工具链历史感兴趣想理解从 RVCT 到现代 GCC/Clang 演进脉络的学习者以及任何一位在配置 C/C 环境时被“环境变量”、“工具链路径”、“头文件库文件”搞得头大想彻底弄明白背后原理的开发者。通过拆解 RVCT 这个相对封闭的“黑盒”我们反而能更清晰地透视一个完整 C/C 编译、链接、调试流程的每一个环节这种理解对于高效使用任何现代 IDE如 VS Code都至关重要。2. 核心需求解析为什么今天还要碰 RVCT你可能会问GCC 和 Clang 如此强大且免费为什么还要折腾一个十几年前的商业编译器这背后是几个非常现实且无法回避的需求。2.1 历史项目维护与二进制兼容性这是最核心的驱动力。很多工业控制、通信设备、消费电子产品的固件或底层 SDK是在 2000 年代初中期基于 RVCT 开发的。RVCT 生成的机器码、库文件格式、甚至一些特殊的编译指令和链接脚本与 GNU 工具链的输出可能存在细微但关键的差异。直接使用现代 GCC 编译老代码极有可能遇到链接错误、运行时行为异常甚至硬件兼容性问题。为了确保产品能够持续获得支持、进行安全补丁更新或小功能迭代必须在原始编译环境下进行构建。RVCT31.rar里封装的就是打开这个历史版本代码仓库的“唯一钥匙”。2.2 精准还原构建过程与调试信息RVCT 配套的调试器RVD和其生成的调试信息格式可能基于 Dwarf 的特定版本或 ARM 自有格式与项目原始的调试符号表紧密相关。如果你想在模拟器或真机上对遗留程序进行单步调试、查看变量就必须使用与之匹配的编译器来重新生成带调试信息的二进制文件。否则调试器将无法正确解析源代码与机器指令之间的映射关系导致调试工作无法进行。2.3 学习与对比理解工具链的演进对于学习者而言对比 RVCT 和现代工具链如 MinGW-w64 中的 GCC的异同是一次绝佳的学习机会。你可以直观地看到命令行接口的差异RVCT 的armcc、armlink与 GCC 的arm-none-eabi-gcc、ld在参数设计上的不同哲学。库管理的区别RVCT 如何管理其运行时库如armlib与 GNU 的newlib或glibc有何不同。优化策略的变迁通过对比编译出的汇编代码理解十几年来编译器优化技术的进步。这种对比能让你不再把编译器当作一个魔法黑箱而是成为一个能主动驾驭工具的开发者。注意获取和使用 RVCT 需确保其合法性。通常拥有历史项目源码的企业会持有相应的许可证。对于纯粹的学习研究ARM 也提供了旧版 DS-5 或 Keil MDK其编译器源自 RVCT的评估版本可作为替代参考。3. 环境搭建实战从 RVCT31.rar 到可用的编译环境假设我们已经合法获得了RVCT31.rar文件并准备在一台 Windows 11 的电脑上搭建环境。我们的目标不是完全依赖其古老的 IDE而是将其工具链集成到 VS Code 中实现代码编辑、编译和基础调试的现代化流程。3.1 解压与安装 RVCT 3.1解压与准备使用 WinRAR 或 7-Zip 解压RVCT31.rar。解压后你通常会得到一个包含setup.exe的安装目录。尽管 Windows 11 兼容性很强但仍建议对setup.exe右键选择“属性” - “兼容性” - 以“Windows XP Service Pack 3”兼容模式运行并以管理员身份执行。自定义安装路径在安装过程中建议将路径设置为一个没有空格和中文的目录例如C:\RVCT31。这能避免后续在配置环境变量和脚本时可能出现的诸多路径解析问题。核心组件识别安装完成后进入C:\RVCT31\bin目录。这里存放着核心的可执行文件例如armcc.exe: C 编译器armcpp.exe: C 编译器armlink.exe: 链接器fromelf.exe: 镜像格式转换工具如将 ELF 转为二进制 bin 文件armsd.exe: ARM 符号调试器命令行版本这些就是我们将要集成到 VS Code 中的核心工具。3.2 配置系统环境变量这是让系统命令行和 VS Code 能找到 RVCT 工具的关键一步。打开“系统属性” - “高级” - “环境变量”。在“系统变量”部分找到并编辑Path变量。点击“新建”添加 RVCT 的 bin 目录路径例如C:\RVCT31\bin。新建一个系统变量可选但推荐变量名RVCT31INC变量值C:\RVCT31\include这个变量可以方便地在构建脚本中引用 RVCT 特有的头文件路径。验证安装打开一个新的命令提示符CMD或 PowerShell输入armcc --vsn或armcc -h。如果正确输出版本信息或帮助文档说明环境变量配置成功。3.3 在 VS Code 中配置 C/C 开发环境VS Code 本身不是编译器它是一个强大的编辑器通过插件和配置来调用外部工具链。这里我们分为两部分通用 C/C 智能感知配置和针对 RVCT 的定制化构建任务。3.3.1 安装必备插件与基础配置安装 C/C 扩展在 VS Code 扩展商店搜索并安装微软官方发布的C/C扩展。这个扩展提供代码智能感知IntelliSense、语法高亮、跳转定义等功能。创建项目文件夹与配置文件为你的老项目创建一个独立文件夹。在该文件夹下VS Code 会自动或手动创建两个核心配置文件c_cpp_properties.json: 控制 C/C 插件的智能感知行为如头文件路径、编译器路径。tasks.json: 定义自定义的构建任务例如调用armcc进行编译。launch.json: 配置调试会话对于 RVCT可能需要配合外部硬件调试器配置较复杂本文先聚焦编译。3.3.2 配置c_cpp_properties.json这个文件告诉 VS Code 的智能感知引擎去哪里找头文件、使用哪个编译器的预定义宏从而提供准确的代码补全和错误检查。{ configurations: [ { name: RVCT31-ARM, includePath: [ ${workspaceFolder}/**, // 首先搜索项目内所有文件 C:/RVCT31/include, // RVCT 系统头文件路径 C:/RVCT31/include/windows // 如果目标平台是 Windows CE 等 ], defines: [ ARM_ARCH_5TE, // 根据你的目标 ARM 架构定义宏例如 ARM7 可能是 ARM_ARCH_4T __CC_ARM, // 标识使用的是 ARM 编译器 __RVCT__, __VERSION_NUMBER__310 ], compilerPath: C:/RVCT31/bin/armcc.exe, // 关键指定 armcc 作为智能感知的查询编译器 cStandard: c99, // RVCT 3.1 可能不完全支持 C99可根据实际情况调整为 c89 cppStandard: c98, intelliSenseMode: windows-arm-cc // 使用 ARM 编译器的智能感知模式 } ], version: 4 }关键点解释compilerPath设置为armcc.exe后C/C 插件会通过调用armcc -E -dM -xc - nul等命令来获取该编译器的内置宏和系统头文件搜索路径从而使智能感知的结果与真实编译环境保持一致。defines预定义宏至关重要。__CC_ARM和__RVCT__是 RVCT 编译器自带的标识很多老代码会用#ifdef __CC_ARM来编写编译器特定的代码段。你必须在这里定义它们否则智能感知会认为这些代码无效灰色显示。intelliSenseMode选择windows-arm-cc能更好地匹配 RVCT 在 Windows 上的行为。3.3.3 配置tasks.json实现一键编译接下来我们创建一个构建任务用 RVCT 工具链编译项目。{ version: 2.0.0, tasks: [ { label: Build with RVCT31 (ARM), type: shell, command: armcc, // 使用 armcc 编译 args: [ -c, // 编译但不链接 --cpuARM926EJ-S, // 指定目标 CPU 内核此处以 ARM9 为例必须根据你的芯片修改 -O2, // 优化等级 -g, // 生成调试信息 --apcsinterwork, // 允许 ARM/Thumb 指令交织 -I${workspaceFolder}/inc, -I${env:RVCT31INC}, // 使用环境变量引用系统头文件 -o, ${fileDirname}/${fileBasenameNoExtension}.o, ${file} ], group: { kind: build, isDefault: true }, problemMatcher: [$gcc] // 使用 GCC 问题匹配器可以高亮显示 armcc 输出的错误和警告 }, { label: Link with RVCT31, type: shell, command: armlink, args: [ --scatter, ${workspaceFolder}/scatterfile.scat, // 加载分散加载文件内存布局 --entry, Reset_Handler, // 指定入口点 --list, ${workspaceFolder}/output.map, // 生成映射文件 --output, ${workspaceFolder}/output.axf, // 输出 ELF 格式文件 ${workspaceFolder}/src/*.o // 链接所有 .o 文件 ], dependsOn: [Build with RVCT31 (ARM)] // 链接任务依赖于编译任务 } ] }实操心得--cpu参数是必须且非常关键的它决定了编译器使用的指令集、流水线调度策略和可用的内置函数。错误的 CPU 设置会导致编译出的代码无法在目标芯片上运行。务必查阅芯片手册或原项目文档。--apcsARM Procedure Call Standard定义了函数调用约定。interwork允许在 ARM 和 Thumb 状态间调用这在混合代码中很常见。scatterfile.scat是 ARM 链接器特有的分散加载描述文件用于精细控制代码、数据在内存中的分布。这是嵌入式开发与桌面 C/C 开发的一个显著区别。你可以通过CtrlShiftB直接运行默认的构建任务编译也可以通过 VS Code 的命令面板 (CtrlShiftP) 运行“任务: 运行任务”来选择“Link with RVCT31”进行链接。4. 现代替代方案MinGW-w64 与通用 C/C 环境配置虽然 RVCT 针对特定历史场景但绝大多数新的 Windows 平台 C/C 开发或者面向 x86/64 的本地应用开发MinGW-w64 是更通用、更活跃的选择。这里也简要梳理其配置与 RVCT 形成对比。4.1 MinGW-w64 的安装与环境变量配置下载从 MinGW-w64 官网 或 SourceForge 等镜像站下载安装器。推荐使用离线包如x86_64-posix-seh版本性能较好且兼容性佳。解压将其解压到无空格中文路径如C:\mingw64。配置环境变量将C:\mingw64\bin添加到系统的Path变量中。这是最关键的一步让系统能找到gcc.exe,g.exe,gdb.exe。验证打开终端输入gcc --version应显示 GCC 版本信息。4.2 在 VS Code 中配置 MinGW-w64配置逻辑与 RVCT 类似但更简单因为 C/C 插件对 GCC 的支持是原生的。c_cpp_properties.json示例{ configurations: [ { name: MinGW64, includePath: [${workspaceFolder}/**], defines: [], compilerPath: C:/mingw64/bin/g.exe, // 或 gcc.exe cStandard: c17, cppStandard: c17, intelliSenseMode: windows-gcc-x64 } ], version: 4 }tasks.json示例构建单个文件{ version: 2.0.0, tasks: [ { label: Build with GCC, type: shell, command: g, args: [ -fdiagnostics-coloralways, -g, ${file}, -o, ${fileDirname}/${fileBasenameNoExtension}.exe ], group: build, problemMatcher: [$gcc] } ] }核心差异对比特性RVCT (armcc)MinGW-w64 (GCC)目标平台特定 ARM 架构ARM7/9/11x86/x86-64 Windows也可交叉编译其他架构许可证商业闭源GNU GPL 开源标准支持C89/C98 为主部分 C99支持最新 C/C 标准C17, C20/23链接脚本专用的分散加载文件.scat通用的链接器脚本.ld调试器RVD (ARM RealView Debugger)GDB (GNU Debugger)生态封闭依赖 ARM 官方开放拥有海量开源库和社区支持现代集成需要较多手动配置与 VS Code、CLion 等 IDE 集成度极高5. 常见问题与深度排查指南在实际操作中无论是配置 RVCT 还是 MinGW-w64都会遇到一些典型问题。5.1 RVCT 环境配置常见问题‘armcc’ 不是内部或外部命令原因环境变量Path未正确添加或添加后未重启终端。解决检查Path变量中 RVCT 的bin目录路径是否正确、完整。确保你是在修改了环境变量后新打开的命令行窗口中进行测试。可以使用echo %Path%查看路径是否包含。编译错误Fatal error: #5: cannot open source file “stdio.h”原因编译器找不到系统头文件。解决检查c_cpp_properties.json中的includePath是否包含了C:\RVCT31\include。检查tasks.json编译任务中的-I参数是否指向了正确的头文件目录。可以使用-I${env:RVCT31INC}来引用环境变量。确认 RVCT 安装是否完整include目录下是否存在必要的头文件。链接错误Error: L6218E: Undefined symbol main原因链接器找不到入口函数。RVCT 的默认入口可能是__main或由分散加载文件指定而非标准 C 的main。解决检查链接器参数--entry是否设置正确是否与启动代码中的入口点符号一致。对于嵌入式无操作系统程序入口通常是Reset_Handler这类中断向量表中的复位处理函数。确保包含了正确的启动文件.s汇编文件它提供了初始化和到main的跳转。智能感知大量红色波浪线但实际能编译通过原因VS Code 的智能感知引擎基于 Clang无法理解 RVCT 特有的编译选项和宏定义。解决确保c_cpp_properties.json中的defines数组里正确定义了__CC_ARM、__RVCT__以及目标 CPU 的宏如ARM_ARCH_5TE。将compilerPath设置为armcc.exe并让插件重新扫描编译器。5.2 MinGW-w64 环境配置常见问题‘g’ 不是内部或外部命令原因/解决同 RVCT 的环境变量问题。确保Path中包含C:\mingw64\bin并使用新终端。编译时提示WinMain未定义引用对于 GUI 程序原因GUI 程序的入口函数是WinMain而非main链接时缺少对应的库。解决在编译命令中添加-mwindows链接器选项例如g main.cpp -o app.exe -mwindows。VS Code 终端中编译成功但直接运行.exe闪退原因程序正常结束控制台窗口自动关闭。或者程序运行时依赖的 MinGW DLL如libstdc-6.dll,libgcc_s_seh-1.dll不在系统路径下。解决在终端中运行程序在 VS Code 集成终端里输入./你的程序名.exe。在代码末尾main函数return前添加system(“pause”);需#include cstdlib或getchar();来暂停。对于 DLL 依赖问题可以将这些 DLL 从C:\mingw64\bin复制到你的.exe同级目录下。5.3 通用调试技巧详细输出在tasks.json的编译命令中添加-vverbose参数让编译器打印出详细的头文件搜索路径、库路径和每一步的处理过程。这对于诊断路径问题非常有效。预处理查看使用armcc -E source.c或gcc -E source.cpp命令只进行预处理并将结果输出到文件。这可以帮你确认宏展开是否正确、头文件是否被包含。映射文件分析无论是 RVCT 的--list还是 GCC 的-Wl,-Mapoutput.map生成的映射文件.map都是分析程序内存布局、查找符号冲突、优化体积的宝贵工具。学会查看它能解决很多诡异的链接期问题。6. 从配置到理解构建系统的本质无论是配置古老的 RVCT 还是现代的 MinGW-w64其核心逻辑是相通的告知工具链三要素——编译器、头文件、库文件的位置和规则。VS Code 的c_cpp_properties.json解决了“编辑时”的智能感知问题头文件和宏而tasks.json解决了“构建时”的编译链接问题调用哪个编译器、传递什么参数。对于 RVCT 这类专用工具链难点往往在于寻找正确的 CPU 架构参数、理解其特有的分散加载内存模型、以及适配老旧的 C ABI。每一次成功的配置都是对目标硬件平台和软件历史背景的一次深入理解。而对于 MinGW-w64 这类通用工具链挑战则在于管理日益复杂的项目依赖、构建脚本如 CMake的编写以及利用现代 C 特性。其活跃的社区和丰富的文档是最大的优势。我个人在实际操作中的体会是不要畏惧老旧的工具。像 RVCT 这样的环境由于其相对固定和封闭一旦配置成功就极其稳定。把它当作一个学习编译、链接、目标文件格式的“标本”反而能让你剥离现代集成开发环境IDE的便利性看清软件从源代码到芯片执行的完整链条。这个过程锻炼出的环境问题排查能力是每个资深工程师的宝贵财富。当你再面对任何新的、陌生的 SDK 或工具链时这种“拆解-理解-配置”的肌肉记忆会让你游刃有余。最后再分享一个小技巧为每个不同的工具链或项目创建一个独立的 VS Code 工作区.code-workspace文件并在其中保存好对应的配置文件可以让你在不同项目间快速切换而不会互相干扰。本文还有配套的精品资源点击获取

相关新闻

2026/9/2 13:40:08

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统 文章目录基于 Spark 和 Hadoop 的空气质量数据分析与预测系统引言项目目标技术栈数据来源系统核心功能1. 用户认证与管理2. 数据总览3. 空气质量分析4. 词云图5. AQI 预测项目结构预览关键代码分享1. Flask 主文件&#xff…

2026/9/2 13:35:08

智能体技能库能帮你做什么?Agent Skills 的完整解读

智能体技能库能帮你做什么?Agent Skills 的完整解读 【免费下载链接】awesome-agent-skills A curated collection of 1000 agent skills from official dev teams and the community, compatible with Claude Code, Codex, Gemini CLI, Cursor, and more. 项目地…

2026/9/2 13:35:08

20个C#项目实战开发与源码:覆盖上位机、Web与硬件对接

简介:面向C#初学者与进阶开发者的实战项目合集,内含20个完整项目及全部源码,覆盖Windows Forms、WPF、ASP.NET、移动端及游戏开发等典型场景,帮助读者从语法基础走向真实项目落地。资源共6357个文件,以C#源码、图形资源…

2026/9/2 14:00:10

DeepTutor 实操指南:三步搭起你的个性化 AI 导师工作区

DeepTutor 实操指南:三步搭起你的个性化 AI 导师工作区 【免费下载链接】DeepTutor DeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/. 项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor DeepTutor 是一个开源、本地部署的…

2026/9/2 14:00:10

Go os/exec 执行外部命令实战:超时杀进程、捕获输出与命令注入防护

Go os/exec 执行外部命令实战:超时杀进程、捕获输出与命令注入防护 用 Go 调用外部命令(ffmpeg、git、ping……)看着简单,exec.Command 一把梭。但线上总出幺蛾子:命令卡死拖垮整个服务、报错了却拿不到 stderr 只看到一句 exit status 1、更严重的是把用户输入拼进命令里被人注…

2026/9/2 13:55:09

开源大模型企业级应用:从工程化到安全落地的三大核心需求

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

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/2 9:00:32

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/2 8:41:06

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…