尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Keil5与Keil4双版本共存安装教程:C51与MDK5合并详解

Keil5与Keil4双版本共存安装教程:C51与MDK5合并详解 这段时间为了维护一批老设备我电脑上被逼着装了双份Keil一个是十年前遗留下来的C51工程用Keil4uVision4打开才省心另一个是最新的STM32项目早就切到Keil5MDK5管理了。Win10下把这两个版本装在一起、还不互相打架说难不难但网上能找到的资料要么太老、要么只讲单版本安装“合并步骤”这种关键操作几乎没有一篇写清楚。这篇文章就按我实际踩坑后的完整流程来写覆盖Keil5与Keil4双版本共存的安装顺序、C51工具链合入MDK5的详细步骤以及常见冲突怎么排查。适合手头同时有8051老工程和ARM新项目的开发者也适合刚接触Keil、怕把环境装乱的新手。1. 先把问题搞清楚Keil4和Keil5到底差在哪1.1 版本命名的误区和两个工具的定位很多人一听到“Keil4”和“Keil5”以为只是界面换了个皮肤。实际上这里面藏了个容易混淆的点Keil是IDE的名字它内部挂载的是不同工具链。我们用“Keil4”通常指uVision4外壳搭配的可能是C51系列编译器用于8051单片机也可能是MDK4.74用于ARM而“Keil5”主要指uVision5外壳搭配MDK5.xARM工具链或者新版C51V9.6x8051工具链。所以双版本共存的本质不是“两个IDE装两个文件夹”这么简单而是要让两套不同年代的IDE和工具链在同一个Win10系统里和平共处。我在本文推荐的组合是Keil4C51V9.54a / uVision4负责老8051项目Keil5MDK5.36或5.37负责STM32等ARM项目如果你手头还有老的ARM项目必须用MDK4.74原理也一样安装思路完全通用。1.2 两个版本装在一起会有哪些冲突直接双击两个安装包一路下一步十有八九会出现以下情况安装目录冲突Keil老版本默认安装到C:\Keil新版默认也是C:\Keil后装的直接覆盖先装的UV4.exe和UV5.exe虽然文件名不同但很多共用的DLL会被替换导致旧版打开后菜单错乱甚至闪退。TOOLS.INI被覆盖Keil安装根目录下的TOOLS.INI记录着工具链路径和芯片数据库位置。两个版本写同一个TOOLS.INI后装的会把先装的配置顶掉结果就是某一个版本打开后找不到8051或找不到ARM设备。工程文件关联错乱Keil4工程后缀是.uvprojKeil5是.uvprojx看起来不一样但系统注册表里默认打开方式经常被后装的版本抢走双击老工程文件时弹出“升级提示”双击新工程又可能被老版本打开。License互相覆盖激活信息写在注册表公共区域装一个新版本可能导致另一个版本变成未注册的评估模式编译超过16KB代码直接报错。所以共存的关键不是“装两个软件”而是“规划好目录、控制好TOOLS.INI、处理好License和文件关联”。这也是后面所有步骤的核心逻辑。2. 安装前的准备工作2.1 理清手里有哪些安装包版本选择建议装之前先把手头的安装包整理清楚。我的建议是给每个安装包单独建一个目录名字带版本号千万不要笼统叫“Keil安装包.exe”否则第二天你自己都分不清哪个是哪个。我常用的版本规划如下安装包版本用途备注C51V954a.exeKeil4uVision48051系列开发最后一代uVision4界面经典稳定MDK474.exeKeil4uVision4老ARM芯片开发M3/M4老工程不推荐新项目使用MDK536.exeKeil5uVision5STM32新项目自带AC5和AC6双编译器C51V960.exeKeil5uVision5新版8051开发如果C51工程很老慎用界面换血如果只是做8051 STM32双线开发最稳妥的搭配是C51V954a装进Keil5目录做合并 MDK536作为Keil5主程序。如果需要MDK4.74建议单独安装到另一个目录不参与合并专门用来打开老ARM工程。这里有个经验MDK5.37之后的版本默认不带AC5编译器很多老工程的编译选项可能需要额外下载ARM Compiler 5所以版本选了MDK5.36作为兼容性分界线。2.2 Win10环境设置和目录规划Win10下装Keil有一个很容易被忽略的点一定要用管理员身份运行安装程序。因为Keil安装过程要写注册表、要注册调试器驱动的服务普通权限表面上装完了实际可能出现“打不开”“找不到设备”这类莫名其妙的问题。其次是关闭杀毒软件和Windows Defender实时防护。这个不是玄学。C51V954a这个老安装包在Win10上经常被Defender拦截装到一半提示文件无法写入或者装完了某个关键DLL被隔离。建议安装期间暂时关闭实时防护装完再开回来。全程记得把两个版本安装到不同目录比如Keil5 → C:\Keil_v5Keil4 → C:\Keil_v4路径里不要有中文或空格避免后续命令行编译、脚本调用时出错。也不要为了省事都装到C:\Program Filesx86下面Win10的用户账户控制对Program Files目录有额外权限限制Keil这类老软件经常在里面写临时文件时被拦。2.3 关于License和注册机的一句话提醒网上关于Keil注册机的讨论非常多这里我给一句实在话不建议下载来路不明的注册机很多所谓“破解版”在Win10上会被杀软标记而且一旦系统更新或重装激活状态很容易失效。Keil官方提供16KB评估限制学习用途够用正式项目建议买正版序列号或申请评估License。后面激活步骤我会按正规流程写License管理窗口License Management的用法是一样的。3. 第一步先装正主Keil5MDK5.x3.1 安装过程实录先装Keil5的理由很直接它版本新、对Win10兼容性最好后面C51合并也是往它的目录里写东西先把地基打好。运行MDK536.exe安装包后一直点Next到了安装路径选择时改成C:\Keil_v5。这一步从源头规避了和Keil4抢C:\Keil目录的问题。安装过程的几个细节需要特别注意Pack Installer会在安装结束时自动弹出不用急着下载全部包。它默认会勾选一大堆芯片型号全部下载太浪费时间。建议只勾选你实际用的芯片系列比如STM32F1、STM32F4其他全部取消。Pack集成包也可以后续在“Pack Installer”里补装。安装完成后先不要启动Keil5直接进入下一节合并或者备份。因为新装完第一时间文件最干净方便做备份。菜单栏的“Project → Manage → Pack Installer”里可以设置Pack下载源。如果下载速度很慢可以考虑从Keil官网下载离线Pack包双击.pack文件即可安装效果和在线安装一样。3.2 装完立刻备份一次防患于未然这一步很多教程不写但我强烈建议执行。在合并C51、安装Keil4之前把C:\Keil_v5整个目录复制一份到别的盘命名C:\Keil_v5_Backup。如果你嫌整个目录太大一般有几个GB至少也要备份以下内容C:\Keil_v5\TOOLS.INIC:\Keil_v5\UV4目录Keil5核心程序文件C:\Keil_v5\ARM目录ARM编译器、芯片支持库因为后面合并C51时安装程序可能会改动TOOLS.INI甚至替换某些共用DLL。一旦合并失败你可以直接把备份的TOOLS.INI和UV4目录还原回去五分钟内恢复原状不用重装。实测下来这个备份救了我不止一次。4. 第二步把C51“合并”进Keil5核心合并步骤4.1 合并思路很多教程讲“装上C51就能用”但实际操作时你会发现装完C51V954a后打开Keil5新建工程还是找不到8051芯片。这是因为C51编译器和MDK是两套完全独立的工具链IDE通过TOOLS.INI里的配置决定加载哪一套。合并的目的是让Keil5的uVision5同时识别MDK和C51两条工具链这样你在同一个IDE里既可以选择STM32也可以选择STC89C52这类8051芯片。合并的原理说穿了并不复杂把C51相关的文件夹主要是C51目录和芯片数据库放到Keil5的安装根目录下然后在TOOLS.INI里加上C51的Path和Device Database路径。理解了这个原理你就明白为什么合并后Keil5能识别C51也知道合并失败时该去哪里排查。4.2 方案A安装C51时直接指向Keil5目录如果你还没安装Keil4最省事的方案是运行C51V954a安装包时把安装路径直接改成C:\Keil_v5和MDK5安装在同一个根目录下。C51的安装程序会自动检测到已存在的Keil5目录把C51文件夹写进去同时更新TOOLS.INI添加[C51]组配置。安装完成后直接打开Keil5点新建工程芯片选择窗口里应该能看到Atmel、STC、NXP等8051系列单片机这样就完成了合并。这个方法成功率最高因为一切都是安装程序自己处理的不容易漏文件。我第一台电脑就是这么装的之后在多个版本组合上验证过基本没有失败过。4.3 方案B已有独立Keil4时手动合并如果你已经装好了独立的Keil4比如C:\Keil_v4或者C51V954a安装时没注意装到了单独目录也可以手动合并。先打开C:\Keil_v4看看里面有没有C51这个文件夹通常有并且包含INC、LIB、DEVICES等子目录。手动合并步骤如下把C:\Keil_v4\C51整个文件夹复制到C:\Keil_v5\C51。检查C:\Keil_v5根目录下有没有TOOLS.INI用记事本打开。在TOOLS.INI末尾增加或合并以下内容[C51] PATHC:\Keil_v5\C51\ TXT51 TDRV1BIN\MON51.DLL (51-Monitor) TDRV2BIN\ISD51.DLL (51-ISD) TDRV3BIN\MON390.DLL (390-Monitor) TDRV4BIN\MONAD51.DLL (ADI Monitor) TDRV5BIN\MON51.DLL (53-Monitor) TDRV6BIN\MON51.DLL (54-Monitor) TDRV7BIN\MON51.DLL (55-Monitor) TDRV8BIN\MON51.DLL (56-Monitor) TDRV9BIN\MON51.DLL (57-Monitor) TDRV10BIN\MON51.DLL (58-Monitor) TDRV11BIN\MON51.DLL (59-Monitor) TDRV12BIN\MON51.DLL (60-Monitor) TDRV13BIN\MON51.DLL (61-Monitor) TDRV14BIN\MON51.DLL (62-Monitor) TDRV15BIN\MON51.DLL (63-Monitor) TDRV16BIN\MON51.DLL (64-Monitor)确认[C51]段里没有缺少Device Database的路径。C51的设备数据库默认在C51\DEVICES目录安装程序会自动写进TOOLS.INI如果手动添加时不确定可以对比Keil4的TOOLS.INI。打开Keil5新建工程验证8051设备是否出现。如果芯片列表为空重启Keil5再检查TOOLS.INI是否有拼写错误。手动合并的坑主要在第一行PATH的引号和斜杠方向。路径必须用双引号包起来斜杠用反斜杠写错了uVision启动时直接报“Cannot load driver”或者“TOOLS.INI corrupted”。4.4 合并后验证与恢复合并完成后验证的标准就是打开Keil5能新建C51工程也能新建STM32工程。新建工程时弹出的设备选择窗口如果你能同时看到STMicroelectronicsARM和Atmel/STC8051就说明合并成功。万一合并后Keil5启动异常比如闪退、提示找不到ARM设备不要慌按这个顺序排查先看C:\Keil_v5根目录下TOOLS.INI的大小正常情况下应该有几十行如果只剩几行说明文件在安装时被覆盖了直接把备份还原。检查C:\Keil_v5\ARM目录是否存在。C51安装程序偶尔会覆盖掉和ARM共用的DLL碰到这种就直接从备份里把UV4和ARM目录拉回来。仍然不行就重装MDK5路径还是C:\Keil_v5然后重新合一遍C51。整个过程不超过十分钟比反复琢磨省时间。5. 第三步再装独立Keil4uVision4实现双版本共存5.1 装Keil4时的注意事项合并完成后你的Keil5已经能处理8051和ARM两种工程了那为什么还要再装一个独立的Keil4原因在于有些老工程尤其是使用第三方库、特殊配置的C51工程用uVision4打开能原样保留设置转到uVision5后虽然也能打开但会出现选项被更新、旧插件失效之类的小问题。对于只用来维护老代码的机器保留一个独立Keil4是最稳妥的方案。运行C51V954a安装包或MDK474安装包安装路径务必改成C:\Keil_v4和Keil5区分开。这一步最容易出问题的地方是安装时手滑没改路径直接装到了C:\Keil_v5里把刚合并好的环境破坏掉。装完后打开Keil4新建工程确认8051设备列表正常。如果打开Keil4时提示找不到TOOLS.INI或者License检查C:\Keil_v4目录下有没有自动生成TOOLS.INI没有的话去C:\Keil_v5复制一份过来改路径也行。激活方面Keil4和Keil5的License是分开算的。打开Keil4的File → License Management你能看到当前License的Toolset是C51还是ARM。如果你的授权码是C51的Keil5可能识别不到这时候需要在License Management里重新添加授权。评估模式虽然能用但有16KB代码限制编译大工程会直接失败。5.2 默认文件关联的处理双版本装好后最烦人的就是双击工程文件时总被错误的版本打开。处理方法有两个层面第一层是系统关联。右键点击.uvproj文件 → 打开方式 → 选择其他应用 → 找到C:\Keil_v4\UV4\UV4.exe勾选“始终使用此应用打开”。.uvprojx文件同理选择C:\Keil_v5\UV4\UV5.exe。注意Keil5的程序文件虽然在UV4目录下但名称是UV5.exe别选错。第二层是Keil自己维护的关联。打开Keil5菜单Project → Manage → Project Extensions里面可以设置工程文件类型和IDE的关联。Keil4没有这么细的设置所以主要靠系统层面的打开方式控制。有时候双击.uvproj文件会弹出“转换为Keil5工程”的窗口这是Keil5在抢关联。如果你想让老工程始终用Keil4打开不要点确认取消后重新设置打开方式。设置完还是被抢就进注册表编辑器删掉HKEY_CLASSES_ROOT.uvproj和.uvprojx里残留的默认值重新指定。5.3 工程版本转换与双份保存策略既然双版本都在工程文件的转换策略也要想清楚。Keil5打开Keil4的.uvproj时会有提示“工程文件由旧版本创建是否迁移”点“是”后会生成一份.uvprojx这个过程是单向的。如果你在Keil5里编译并保存了工程Keil4就打不开了。我的建议是老项目只维护一份源文件但工程文件保留两套。源目录下放一个Keil4版工程和一个Keil5版工程编译时按需要选择。比如bootloader用Keil4工程打开app用Keil5工程打开两边互不干扰。虽然占一点磁盘空间但比来回转换、发现配置对不上再重配省心得多。6. 兼容性方案与调试环境共用6.1 调试器DLL冲突怎么避免双版本共存还有一个容易踩的坑是调试器DLL版本冲突。J-Link、ST-Link这类调试器在Keil目录下都有对应的DLL文件比如JLinkARM.dll。Keil4和Keil5各自目录下的DLL版本不一样老版本Keil4对高版本J-Link DLL支持不好会提示“The connected J-Link is defective”或者无法识别设备。解决思路是调试老C51工程时用Keil4自带的驱动不要刻意升级调试STM32时用Keil5的Pack和驱动。如果两个版本共用同一个J-Link且需要新版本固件可以把新JLinkARM.dll复制到Keil4的目录里但一定要先备份原始DLL因为新DLL和老uVision4有时不兼容。我这里实际使用中验证过MDK5.36的JLinkARM.dll拷到Keil4的UV4目录大部分情况下能正常工作但遇到个别克隆版J-Link会出现兼容问题这时还是用回Keil5最稳。另外Win10下使用ST-Link、J-Link这些调试器如果设备管理器里能识别但驱动显示警告通常是驱动签名问题。Win10会强制校验驱动签名老调试器驱动容易被拦。解决办法是临时进入高级启动选项关闭驱动签名强制装好驱动后再重启恢复。这个操作在Win10设置 → 更新和安全 → 恢复 → 高级启动里可以找到。6.2 Pack机制差异Keil4和Keil5的芯片库逻辑Keil5采用Pack包机制管理芯片支持芯片型号、SVD文件、Flash算法都放在Pack安装器里。没有对应Pack即使Keil5安装了也找不到你的STM32型号。Keil4没有Pack概念所有芯片信息直接集成在安装目录下的Device Database里。这就带来一个现象合并C51到Keil5时C51的芯片库位置和MDK不同C51的设备数据库在C51\DEVICESMDK的设备数据库在ARM\PACK或ARM\DeviceFamilyPack。Keil5加载时会分别读取所以只要Toolchain配置正确两种芯片型号都能识别。如果Keil5的Pack Installer里找不到某款芯片或者下载失败可以考虑从Keil官网下载对应的离线.pack文件保存到本机后双击安装。注意安装Pack也需要管理员权限。一个常见问题是Keil4的工程用Keil5打开后编译时提示找不到某个头文件或某个宏定义这通常是Pack版本不是工程原始使用的版本可以在Device选项里的“Pack”下拉框切换版本。6.3 Win10下驱动和UAC设置Win10对老软件不太友好尤其是权限管理。Keil4的uVision4在Win10上偶尔会出现调试时无法连接目标板、下载时报错“Error: Flash Download failed - Cortex-M3”的情况。除了芯片选错、接线问题权限是最容易被忽略的原因。建议把Keil4和Keil5都设置为“以管理员身份运行”右键exe文件 → 属性 → 兼容性 → 勾选“以管理员身份运行此程序”。对于老版本Keil4还可以在兼容性选项卡里把模式改成Windows 7。虽然Win10下不改通常也能跑但调试器访问USB设备时普通权限可能被限制。如果你的工程用到了虚拟串口比如STM32的VCP驱动注意Win10自带USB串口驱动但ST-Link的VCP驱动在老版本上偶尔冲突。处理方法是更新ST官方驱动到最新版并且在设备管理器里卸载旧设备后重新扫描。这个方法解决了我多次“找不到COM口”的麻烦。7. 常见问题与排查技巧实录7.1 双版本共存问题速查表下面这张表是我在实际使用中遇到过且验证过有效的排查合集按问题现象排序现象原因处理方法Keil5找不到8051芯片未合并C51或TOOLS.INI缺少[C51]段按4.2/4.3节合并检查TOOLS.INIKeil4打开提示“T005: Cannot load driver”调试器DLL版本冲突换回Keil4原始DLL或更新J-Link驱动双击.uvproj总被Keil5打开文件关联被Keil5抢走右键打开方式指定UV4.exeKeil5打开老工程后代码在中文字符串处报错编码格式转换导致在Edit → Configuration里调整Encoding或保持用Keil4打开编译提示“Target uses ARM-Compiler”且找不到AC5MDK5.37默认不带AC5安装ARM Compiler 5兼容包或在Project Options里切换编译器版本License管理窗口里只有C51或只有ARM授权类型不匹配重新添加授权确保授权码工具链类型正确Keil4能启动但新建工程没有Atmel/STC设备设备数据库文件被替换从备份恢复C51\DEVICES目录安装包被Defender拦截老安装包签名不受信任暂时关闭实时防护装完恢复7.2 高频问题的详细排查记录问题一合并后Keil5闪退最常见的闪退原因是TOOLS.INI路径写错。检查方法是用记事本打开TOOLS.INI确认[C51]段和[ARM]段都完整且PATH指向的目录真实存在。如果[C51]段存在但C51目录不存在uVision启动时会加载空数据库直接崩溃。这种直接把备份还原再小心操作一遍即可。问题二Keil4打开Keil5转出的工程文件乱码Keil5默认使用UTF-8编码Keil4使用ANSI编码。如果老工程在Keil4里保存时是GB2312中文注释转到Keil5后不改编码打开中文字符会变成乱码。反过来也成立Keil5保存的工程文件用Keil4打开也可能乱码。处理方法是在Keil5的Edit → Configuration → Editor → Encoding里选择“Chinese GB2312 (Simplified)”或者干脆老工程不往Keil5迁移直接坚守Keil4。问题三License显示过期或被占用如果两个版本分别激活后过一段时间又变成评估版多半是注册表里的License信息被另一个版本覆盖。排查时打开License Management窗口把当前所有LIC项全部Remove然后重新输入序列号。移除后重新添加不会影响已编译的文件放心操作。如果遇到“Floating License”相关的报错检查网络和防火墙设置这是因为浮动授权需要访问授权服务器。问题四调试时找不到设备或连接超时按顺序排查USB线和接口是否正常设备管理器是否识别到调试器Keil的Debug设置里的调试器型号是否选对目标板是否上电最后检查Keil和调试器的DLL版本。80%的“找不到设备”都出在前三步不要一上来就重装驱动。7.3 备份与恢复的终极兜底方案如果上面的排查方法都试过了还是不行还有最后一招用干净环境重装。先卸载两个Keil再用系统自带的磁盘清理把C:\Keil_v5、C:\Keil_v4残留目录删掉重点清理注册表HKEY_LOCAL_MACHINE\SOFTWARE\Keil和HKEY_CURRENT_USER\Software\Keil这两个项。因为Keil的卸载程序并不干净会留下一堆文件和注册表项。重装时严格按照本文顺序先装Keil5C:\Keil_v5装完备份再合并C51最后装Keil4C:\Keil_v4。全程保持管理员权限关闭杀毒。整个流程走下来大概20分钟不比反复排障慢多少。我个人在实际操作中的体会是双版本共存的核心就是“目录隔离 TOOLS.INI统一管理 文件关联手动控制”三条都做到位剩下的都是小问题。最后再分享一个小技巧把C:\Keil_v5\UV4\UV5.exe和C:\Keil_v4\UV4\UV4.exe分别发送到桌面快捷方式重命名为“Keil5-ARM”和“Keil4-C51”以后开错版本的概率会低很多。这个习惯我用了三年从没因为开错工具链而浪费过时间。
返回列表