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

MounRiver环境下高效构建沁恒MCU独立工程的实践指南

1. 为什么需要构建独立工程第一次接触沁恒MCU开发的朋友可能会直接使用官方提供的EVT开发包进行项目开发。EVT开发包确实非常方便里面包含了各种外设的示例代码开箱即用。但用久了你会发现一个问题当你修改某个公共文件比如link.ld链接脚本或者StdPeriphDriver中的库文件时其他工程也会受到影响。这是因为EVT为了节省空间采用了文件复用的设计。我刚开始用CH573做项目时就踩过这个坑。当时修改了一个外设驱动的配置参数结果发现其他示例工程全都编译报错了。更麻烦的是每次打开工程都要在层层嵌套的文件夹里找半天开发效率大打折扣。后来我摸索出一套构建独立工程的方法不仅解决了文件冲突问题还能按照自己的习惯组织代码结构。2. 准备工作获取EVT开发包首先需要从沁恒官网下载对应芯片的EVT开发包。以CH573为例访问沁恒官网www.wch.cn在搜索框输入CH573EVT下载最新版本的开发包下载完成后解压压缩包你会看到一个类似CH573EVT的文件夹。建议把这个文件夹放在不会经常移动的位置因为后续我们会频繁引用其中的文件。解压后的目录结构通常包含EXAM示例工程目录PUB公共文档和工具TOOLS烧录工具等实用程序重点看一下EXAM/SRC目录这里存放着所有工程共享的核心文件Ld链接脚本RVMSISRISC-V核心相关文件Startup启动文件Peripheral外设驱动库3. 创建独立工程框架3.1 复制基础工程我建议直接从EVT中复制一个现成工程作为起点这样可以省去很多基础配置。比如要做一个蓝牙项目可以复制EXAM/BLE下的工程在硬盘上新建一个项目文件夹比如MyBLEProject从EVT中复制BLE工程到这个文件夹重命名工程文件夹如改为BLE_Transmitter小技巧选择与你项目功能最接近的示例工程作为起点能节省大量底层配置时间。3.2 整理目录结构接下来要按照自己的习惯重新组织目录。这是我的常用结构MyProject/ ├── Core/ # 芯片核心文件 │ ├── Ld/ # 链接脚本 │ ├── Startup/ # 启动文件 │ └── RVMSIS/ # RISC-V核心支持 ├── Drivers/ # 外设驱动 │ ├── CH57x/ # 沁恒官方驱动 │ └── ThirdParty/ # 第三方驱动 ├── Src/ # 应用代码 │ ├── App/ # 主程序 │ └── Profile/ # 协议栈配置 ├── Inc/ # 头文件 └── Project/ # 工程文件具体操作步骤在工程根目录新建Core文件夹将EVT/EXAM/SRC下的Ld、Startup、RVMSIS文件夹复制到Core新建Drivers文件夹复制必要的外设驱动创建Src和Inc文件夹存放应用代码4. 配置MounRiver工程4.1 清理虚拟链接打开MounRiver Studio右键工程选择Properties进入Resource → Linked Resources删除所有链接目录这些指向EVT的原始路径进入C/C General → Paths and Symbols → Source Location删除所有外部引用路径这一步的目的是让工程完全脱离对EVT目录的依赖。4.2 设置头文件路径现在需要告诉编译器在哪里找头文件右键工程 → Properties → C/C General → Paths and Symbols在Includes选项卡添加以下路径Core/RVMSISDrivers/CH57x/incInc确保勾选Is a workspace path如果使用第三方库记得把它们的头文件路径也加进来。4.3 更新链接脚本路径由于我们把ld文件移动到了Core/Ld目录需要更新工程配置进入C/C Build → Settings → Tool Settings → Linker修改Linker script路径为Core/Ld/你的链接脚本.ld如果有分散加载文件也需要更新路径5. 验证工程独立性完成上述步骤后可以进行验证测试尝试修改Core/Ld下的链接脚本然后检查EVT中的其他工程是否受影响在Drivers中添加新的外设驱动确保能正常编译故意删除EVT目录验证你的工程是否能独立编译如果一切正常恭喜你现在你拥有一个完全独立的工程可以自由修改任何文件而不必担心影响其他项目。6. 高级技巧与优化建议6.1 使用符号链接管理公共组件如果你有多个独立工程需要共享某些组件如协议栈可以考虑使用符号链接# Windows下创建符号链接的命令 mklink /D MyProject\Drivers\Protocol D:\SharedCode\Protocol这样既保持了工程独立性又能同步更新公共代码。6.2 版本控制的最佳实践建议在.gitignore中添加# 忽略生成文件 Obj/ Debug/ Release/ # 忽略本地配置 /.settings/只提交源代码和必要的工程文件避免将编译中间文件纳入版本控制。6.3 自动化构建配置可以在工程根目录创建build.py脚本用来自动完成以下工作检查工具链是否就绪清理旧构建执行编译生成bin/hex文件运行单元测试如果有7. 常见问题排查7.1 编译时报头文件找不到可能原因路径配置错误头文件确实缺失大小写不匹配Linux系统区分大小写解决方法检查Paths and Symbols中的配置使用绝对路径测试是否能找到确认文件名大小写7.2 链接阶段报错常见错误未定义引用通常是缺少库文件或实现内存区域冲突检查链接脚本中的内存布局我的经验是90%的链接问题都可以通过以下步骤解决清理工程Project → Clean检查库文件是否全部添加确认链接脚本与芯片型号匹配7.3 调试时无法命中断点可能原因优化级别太高尝试-O0代码没有实际加载到芯片调试配置错误建议检查编译选项中的优化级别调试配置中的加载地址芯片是否处于调试模式

相关文章:

MounRiver环境下高效构建沁恒MCU独立工程的实践指南

1. 为什么需要构建独立工程 第一次接触沁恒MCU开发的朋友,可能会直接使用官方提供的EVT开发包进行项目开发。EVT开发包确实非常方便,里面包含了各种外设的示例代码,开箱即用。但用久了你会发现一个问题:当你修改某个公共文件&…...

黑丝空姐-造相Z-Turbo生成效果测评:写实与幻想风格的边界探索

黑丝空姐-造相Z-Turbo生成效果测评:写实与幻想风格的边界探索 最近,一个名为“黑丝空姐-造相Z-Turbo”的AI图像生成模型在圈内引起了不少讨论。名字听起来有点特别,但它的核心卖点很明确:在生成高度写实的“照片”与完全幻想的“…...

实时音乐分类系统开发:CCMusic+WebAudioAPI实战

实时音乐分类系统开发:CCMusicWebAudioAPI实战 1. 引言 你有没有遇到过这样的情况:手机里存了几千首歌,却不知道怎么分类整理?或者作为音乐平台开发者,想要为用户提供智能歌单分类功能,却不知道从何入手&…...

STM32F042 CAN调试实战:从端口映射到波形捕获的完整指南

1. STM32F042 CAN调试入门指南 第一次接触STM32F042的CAN总线调试时,我也遇到了不少坑。这个SSOP20封装的芯片引脚资源有限,PA11和PA12默认并不是CAN功能引脚,需要进行端口映射。很多新手在这里就会踩坑,直接使用SYSCFG_MemoryRem…...

Phi-3-Mini-128K模型解析:从计算机组成原理视角看高效推理

Phi-3-Mini-128K模型解析:从计算机组成原理视角看高效推理 最近体验了Phi-3-Mini-128K这个模型,第一感觉就是快。在同样的硬件上,它生成文本的速度明显比一些同体量的模型要流畅。这让我很好奇,它到底是怎么做到的?难…...

简单三步:用AI超清画质增强镜像,让模糊图片重获新生

简单三步:用AI超清画质增强镜像,让模糊图片重获新生 1. 为什么你需要这个AI画质增强工具 你是否遇到过这些情况? 珍贵的家庭老照片已经模糊不清从网上下载的图片分辨率太低无法使用手机拍摄的照片放大后细节全无工作需要的图片素材质量太差…...

二维激光雷达SLAM数据集实战:从下载到地图构建

1. 二维激光雷达SLAM数据集入门指南 第一次接触SLAM的朋友可能会被各种专业术语吓到,但其实用二维激光雷达数据上手SLAM并没有想象中那么难。就像我第一次接触时,导师扔给我一个数据集说"先跑通这个",结果折腾了整整三天才看到地图…...

Windows 10/11 下从零搭建 Detectron2 开发环境(避坑指南)

1. 为什么选择Detectron2? Detectron2是Facebook AI Research开源的下一代目标检测和图像分割框架,基于PyTorch构建。相比第一代Detectron,它提供了更灵活的模块化设计、更快的训练速度以及更好的扩展性。在实际项目中,我经常用它…...

CCMusic Dashboard实战手册:CCMusic+Whisper联合流水线——语音内容+背景音乐双轨分析

CCMusic Dashboard实战手册:CCMusicWhisper联合流水线——语音内容背景音乐双轨分析 1. 项目概述:当音乐分析遇上计算机视觉 想象一下,你有一段包含人声和背景音乐的音频,想要同时分析说话内容和音乐风格。传统方法需要分别使用…...

Qwen3-14b_int4_awq部署优化:vLLM动态批处理(dynamic batching)配置详解

Qwen3-14b_int4_awq部署优化:vLLM动态批处理配置详解 1. 模型简介与部署准备 Qwen3-14b_int4_awq是基于Qwen3-14b模型的int4量化版本,采用AWQ(Activation-aware Weight Quantization)技术进行压缩优化。这个量化版本通过AngelSl…...

手把手教你用Cadence Virtuoso完成LNA全套仿真:基于SpectreRF手册的实战补充

手把手教你用Cadence Virtuoso完成LNA全套仿真:基于SpectreRF手册的实战补充 在射频集成电路设计中,低噪声放大器(LNA)作为接收机前端的关键模块,其性能直接影响整个系统的噪声系数和灵敏度。Cadence Virtuoso配合Spec…...

Python Whoosh实战:5分钟搭建你的第一个本地搜索引擎(附完整代码)

Python Whoosh实战:从零构建高性能本地搜索引擎 在信息爆炸的时代,快速准确地检索内容已成为开发者必备技能。Whoosh作为纯Python编写的轻量级搜索引擎库,让每位开发者都能在5分钟内搭建起专属搜索系统。不同于Elasticsearch等重型方案&#…...

银河麒麟Kylin-Server-V10最小化安装后网络配置全攻略(附常见问题解决)

银河麒麟Kylin-Server-V10最小化安装后网络配置实战指南 刚完成银河麒麟服务器系统最小化安装的用户,往往会面临一个棘手问题——系统默认没有启用网络连接。作为国产化服务器环境的重要组成部分,Kylin-Server-V10虽然稳定高效,但其网络配置与…...

如何用STM32F407和LAN8720A搭建高性能TCP服务器?附MQTT集成示例

STM32F407LAN8720A构建工业级TCP服务器的5个关键实践 在智能家居网关、工业控制器等嵌入式场景中,稳定高效的网络通信能力已成为标配。STM32F407凭借其Cortex-M4内核和硬件以太网外设,配合LAN8720A这颗高性价比PHY芯片,能够构建出满足大多数场…...

RimSort:基于拓扑排序的模组依赖管理系统技术解析

RimSort:基于拓扑排序的模组依赖管理系统技术解析 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 一、核心价值:模组管理的范式革新 在《边缘世界》模组生态系统中,随着平均模组数量突破27个&#…...

Godot游戏开发实战:如何用OpenStreetMap数据快速生成3D城市模型(附完整代码)

Godot游戏开发实战:如何用OpenStreetMap数据快速生成3D城市模型(附完整代码) 当独立游戏开发者想要构建一个真实的城市环境时,手动建模往往耗时费力。而OpenStreetMap(OSM)这个开源地理数据库,正…...

中兴ZXR10-2950交换机VLAN配置实战:从创建到删除的完整流程

中兴ZXR10-2950交换机VLAN配置实战:从创建到删除的完整流程 在企业网络管理中,VLAN(虚拟局域网)技术是实现网络逻辑隔离、提升安全性和管理效率的核心手段。中兴ZXR10-2950作为一款经典的中端交换机,其VLAN配置逻辑清晰…...

立创开源:树莓派Zero/Zero W专用扩展坞硬件设计全解析(含SL2.1A HUB、SR9900A网卡、ETA9742充电)

立创开源:树莓派Zero/Zero W专用扩展坞硬件设计全解析 最近在捣鼓树莓派Zero这个小巧的开发板,发现它虽然体积小、功耗低,但接口也确实少得可怜,只有一个Micro USB口和一个Mini HDMI口。想接个键盘鼠标、U盘,再连个有线…...

告别多窗口直播:5步实现全平台同步推流的高效方案

告别多窗口直播:5步实现全平台同步推流的高效方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 多平台直播已成为内容创作者扩大影响力的必备策略,但同时管理多…...

Web渗透实战:冰蝎工具连接一句话木马完整指南(2024最新版)

Web渗透实战:冰蝎工具连接一句话木马完整指南(2024最新版) 深夜的渗透测试实验室里,显示器蓝光映照着技术文档和半杯冷掉的咖啡。作为一名专注Web安全的工程师,我深知在合法授权测试中,理解攻击者工具链的重…...

Unity模型管理神器:用预制体自动生成预览图的完整流程(含GitHub Demo)

Unity模型管理神器:用预制体自动生成预览图的完整流程(含GitHub Demo) 在游戏开发团队中,资源管理往往是最容易被忽视却又最影响效率的环节。想象一下这样的场景:美术同事刚更新了200个角色模型,你需要手动…...

GLM-4v-9b部署教程:支持LoRA微调接口,适配垂直领域视觉问答任务

GLM-4v-9b部署教程:支持LoRA微调接口,适配垂直领域视觉问答任务 1. 引言:为什么选择GLM-4v-9b? 如果你正在寻找一个既强大又实用的多模态AI模型,GLM-4v-9b绝对值得关注。这个模型有90亿参数,不仅能看懂图…...

TranslateGemma部署避坑指南:常见CUDA错误解决方法大全

TranslateGemma部署避坑指南:常见CUDA错误解决方法大全 1. 为什么你的TranslateGemma部署总在CUDA上栽跟头 你兴冲冲地下载了TranslateGemma镜像,准备体验企业级本地翻译的丝滑,结果一运行,屏幕上蹦出一堆看不懂的CUDA错误代码。…...

Phi-3-vision-128k-instruct部署案例:基于vLLM的轻量多模态模型镜像免配置实践

Phi-3-vision-128k-instruct部署案例:基于vLLM的轻量多模态模型镜像免配置实践 1. 模型简介 Phi-3-Vision-128K-Instruct是一个轻量级的多模态模型,属于Phi-3模型家族的最新成员。这个模型特别之处在于它同时支持文本和视觉数据的处理,并且…...

从内核到应用层:全面解析安卓系统中dmesg和logcat的工作原理与区别

从内核到应用层:全面解析安卓系统中dmesg和logcat的工作原理与区别 在安卓系统开发与调试过程中,日志工具如同开发者的"听诊器",能够精准定位系统运行时的各类问题。对于需要深入系统底层或优化应用性能的开发者而言,掌…...

SNMPv3配置避坑指南:如何用snmp4j实现企业级安全监控

SNMPv3配置避坑指南:如何用snmp4j实现企业级安全监控 在数字化转型浪潮中,网络设备监控已成为企业IT基础设施的"神经系统"。我曾亲眼目睹某金融企业因SNMPv2c协议漏洞导致交换机配置被恶意篡改,造成全网瘫痪6小时的重大事故。这促使…...

Qwen3-14B企业应用案例:用vLLM+Chainlit部署Qwen3-14b_int4_awq做客服话术生成

Qwen3-14B企业应用案例:用vLLMChainlit部署Qwen3-14b_int4_awq做客服话术生成 1. 项目背景与价值 在客服行业,高效的话术生成系统能显著提升服务质量和响应速度。传统人工编写话术存在效率低、一致性差等问题。本文将介绍如何利用Qwen3-14b_int4_awq模…...

RimSort:智能模组编排系统如何重构《边缘世界》玩家体验

RimSort:智能模组编排系统如何重构《边缘世界》玩家体验 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 在《边缘世界》(RimWorld)的游玩生态中,模组管理长期以来是玩家体验的主要痛点。…...

丹青识画系统AI编程辅助工具:根据描述自动生成艺术鉴赏代码

丹青识画系统AI编程辅助工具:根据描述自动生成艺术鉴赏代码 最近在做一个艺术类数据分析的小项目,需要频繁调用图像分析API来处理画作。每次写调用代码、处理返回的JSON数据、再画图展示,一套流程下来,虽然不复杂,但重…...

Zotero Style插件:重构学术文献管理的效率引擎

Zotero Style插件:重构学术文献管理的效率引擎 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员和学者。 项目地址: https:…...