同时兼容KeilC251,C51,MDK
本文介绍了实现Keil C251、C51和MDK多环境兼容的技术方案。通过修改Keil的TOOLS.INI配置文件,动态调整环境参数,使单一UV4.exe可识别并加载不同工程类型(STM32、C51、C251等)。核心步骤包括:1)按顺序安装各工具链;2)合并各环境的配置信息到INI文件;3)定义路径变量和工程关联规则。该方法无需多IDE切换,可自动匹配编译器,有效解决工程文件关联错误问题,显著提
·
实现Keil C251、C51和MDK多环境兼容的技术指南
1. 引言
- 背景介绍:开发多系列单片机(如STM32、C51、C251)时,Keil默认安装导致工程文件关联到最新环境(如UV4.exe),引发兼容性问题。
- 问题描述:打开工程文件时,系统自动调用UV4.exe,但可能加载错误工具链(如C51工程在MDK环境中报错)。
- 解决方案概述:通过修改Keil生成的启动配置文件,动态调整环境参数,实现单一UV4.exe兼容所有工程类型。
- 预期好处:减少IDE切换,提升开发效率,支持混合项目开发。
2. 技术概要
- 核心原理:Keil的UV4.exe在启动时读取配置文件(如
UV4.ini),指定工具链路径和环境参数。通过编辑该文件,添加多环境识别逻辑,UV4.exe能自动匹配工程类型。 - 关键机制:配置文件包含路径变量(如$TOOLKIT_DIR$),修改后UV4.exe根据工程文件扩展名(如
.uvproj)加载对应编译器。 - 兼容范围:支持Keil MDK(ARM)、C51(8051)和C251(251架构),覆盖STM32、传统51系列等开发需求。
- 优势:无需安装多个Keil实例,避免环境冲突,简化工作流程。
3. 准备工作
- 所需工具:
- Keil安装包(确保已安装MDK、C51和C251工具链)。
- 文本编辑器(如Notepad++),用于修改配置文件。
- 系统权限:Windows管理员账户,以访问系统文件。
- 环境检查:
- 确认Keil版本兼容性(如UV4版本需支持所有工具链)。
- 备份原始配置文件,防止意外错误。
安装顺序为C51->C251->ARM/C251->C51->ARM
在同一文件夹下,先安装C51安装包,再安装C251,再安装ARM。每次安装都将TOOLS.INI文件中的每个编译环境的加载内容复制下来。如:
C51:
[C51]
PATH="D:\keil_IDE\MDK\C51\"
VERSION=V9.02a
BOOK0="HLP\Release_Notes.htm" ("Release Notes",GEN)
BOOK1="HLP\C51TOOLS.chm" ("Complete User's Guide Selection",C)
TDRV0=BIN\MON51.DLL ("Keil Monitor-51 Driver")
TDRV1=BIN\ISD51.DLL ("Keil ISD51 In-System Debugger")
TDRV2=BIN\MON390.DLL ("MON390: Dallas Contiguous Mode")
TDRV3=BIN\LPC2EMP.DLL ("LPC900 EPM Emulator/Programmer")
TDRV4=BIN\UL2UPSD.DLL ("ST-uPSD ULINK Driver")
TDRV5=BIN\UL2XC800.DLL ("Infineon XC800 ULINK Driver")
TDRV6=BIN\MONADI.DLL ("ADI Monitor Driver")
TDRV7=BIN\DAS2XC800.DLL ("Infineon DAS Client for XC800")
TDRV8=BIN\UL2LPC9.DLL ("NXP LPC95x ULINK Driver")
RTOS0=Dummy.DLL("Dummy")
RTOS1=RTXTINY.DLL ("RTX-51 Tiny")
RTOS2=RTX51.DLL ("RTX-51 Full")
TDRV9=BIN\STCMON51.DLL ("STC Monitor-51 Driver")
LIC0=47QMA-14EE0-VP2Z0-BV69M-0VQYL-EC1CJ
C251:
[C251]
PATH="D:\keil_IDE\MDK\C251\"
VERSION=5.60
BOOK0="HLP\Release_Notes.htm" ("Release Notes",GEN)
BOOK1="HLP\c251tools.chm" ("uVision User's Guide Selection",C)
TDRV0=BIN\MON251.DLL ("Keil Monitor-251 Driver")
RTOS0=Dummy.DLL("Dummy")
RTOS1=RTXTINY.DLL ("RTX-251 Tiny")
RTOS2=RTX51.DLL ("RTX-251 Full")
TDRV1=BIN\STCMON251.DLL ("STC Monitor-251 Driver")
LIC0=47PLD-82KGZ-788FE-59LW8-82HWT-85L3V
ARM:
[ARM]
PATH="D:\keil_IDE\MDK\ARM\"
VERSION=5.39
PATH1="C:\Program Files (x86)\Arm GNU Toolchain arm-none-eabi\11.2 2022.02\"
TOOLPREFIX=arm-none-eabi-
CPUDLL0=SARM.DLL(TDRV16,TDRV17,TDRV18) # Drivers for ARM7/9 devices
CPUDLL1=SARMCM3.DLL(TDRV0,TDRV1,TDRV2,TDRV3,TDRV4,TDRV5,TDRV6,TDRV7,TDRV8,TDRV9,TDRV10,TDRV11) # Drivers for Cortex-M devices
CPUDLL2=SARMCR4.DLL(TDRV4) # Drivers for Cortex-R4 devices
CPUDLL3=SARMV8M.DLL(TDRV2,TDRV4,TDRV6,TDRV7,TDRV8,TDRV12,TDRV13,TDRV14,TDRV15) # Drivers for ARMv8-M devices
BOOK0="HLP\RELEASE_NOTES.HTM" ("Release Notes for MDK 5.39",GEN)
BOOK1="HLP\ARMTOOLS.chm" ("Complete User's Guide Selection",C)
TDRV0=BIN\UL2CM3.DLL("ULINK2/ME Cortex Debugger")
TDRV1=BIN\ULP2CM3.DLL("ULINK Pro Cortex Debugger")
TDRV2=BIN\ULPL2CM3.dll("ULINKplus Debugger")
TDRV3=BIN\CMSIS_AGDI.dll("CMSIS-DAP Debugger")
TDRV4=Segger\JL2CM3.dll("J-LINK / J-TRACE Cortex")
TDRV5=BIN\DbgFM.DLL("Models Cortex-M Debugger")
TDRV6=STLink\ST-LINKIII-KEIL_SWO.dll ("ST-Link Debugger")
TDRV7=NULink\Nu_Link.dll("NULink Debugger")
TDRV8=PEMicro\Pemicro_ArmCortexInterface.dll("Pemicro Debugger")
TDRV9=SiLabs\SLAB_CM_Keil.dll("SiLabs UDA Debugger")
TDRV10=BIN\ABLSTCM.dll("Altera Blaster Cortex Debugger")
TDRV11=TI_XDS\XDS2CM3.dll("TI XDS Debugger")
TDRV12=BIN\ULP2V8M.DLL("ULINK Pro ARMv8-M Debugger")
TDRV13=BIN\UL2V8M.DLL("ULINK2/ME ARMv8-M Debugger")
TDRV14=BIN\CMSIS_AGDI_V8M.DLL("CMSIS-DAP ARMv8-M Debugger")
TDRV15=BIN\DbgFMv8M.DLL("Models ARMv8-M Debugger")
TDRV16=BIN\UL2ARM.DLL("ULINK2/ME ARM Debugger")
TDRV17=BIN\ULP2ARM.DLL("ULINK Pro ARM Debugger")
TDRV18=Segger\JLTAgdi.dll("J-LINK / J-TRACE ARM")
DELDRVPKG0=ULINK\UninstallULINK.exe("ULINK Pro Driver V1.0")
LIC0=LSNXV-PUMQS-PCAJ8-33SHE-DYASX-BAVUI
4. 修改启动配置文件的分步指南
找到你的安装路径:Keil安装目录下的TOOLS.INI,如("D:\keil_IDE\MDK\TOOLS.INI")。
- 步骤2: 编辑配置文件内容
- 核心修改:在
TOOLS.INI中添加环境切换区块,定义工具链路径和工程关联规则。 - 示例代码(我的INI加载文件,基于INI格式):
[UV2] ORGANIZATION="1" NAME="1", "1" EMAIL="1" ARMSEL=1 USERTE=1 TOOL_VARIANT=mdk_std RTEPATH="D:\keil_IDE\MDK" CPACKGETPATH=D:\keil_IDE\MDK\ARM\cmsis-toolbox\bin CDB0=UV4\STC.CDB ("STC MCU Database") [C51] PATH="D:\keil_IDE\MDK\C51\" VERSION=V9.02a BOOK0="HLP\Release_Notes.htm" ("Release Notes",GEN) BOOK1="HLP\C51TOOLS.chm" ("Complete User's Guide Selection",C) TDRV0=BIN\MON51.DLL ("Keil Monitor-51 Driver") TDRV1=BIN\ISD51.DLL ("Keil ISD51 In-System Debugger") TDRV2=BIN\MON390.DLL ("MON390: Dallas Contiguous Mode") TDRV3=BIN\LPC2EMP.DLL ("LPC900 EPM Emulator/Programmer") TDRV4=BIN\UL2UPSD.DLL ("ST-uPSD ULINK Driver") TDRV5=BIN\UL2XC800.DLL ("Infineon XC800 ULINK Driver") TDRV6=BIN\MONADI.DLL ("ADI Monitor Driver") TDRV7=BIN\DAS2XC800.DLL ("Infineon DAS Client for XC800") TDRV8=BIN\UL2LPC9.DLL ("NXP LPC95x ULINK Driver") RTOS0=Dummy.DLL("Dummy") RTOS1=RTXTINY.DLL ("RTX-51 Tiny") RTOS2=RTX51.DLL ("RTX-51 Full") TDRV9=BIN\STCMON51.DLL ("STC Monitor-51 Driver") LIC0=47QMA-14EE0-VP2Z0-BV69M-0VQYL-EC1CJ [C251] PATH="D:\keil_IDE\MDK\C251\" VERSION=5.60 BOOK0="HLP\Release_Notes.htm" ("Release Notes",GEN) BOOK1="HLP\c251tools.chm" ("uVision User's Guide Selection",C) TDRV0=BIN\MON251.DLL ("Keil Monitor-251 Driver") RTOS0=Dummy.DLL("Dummy") RTOS1=RTXTINY.DLL ("RTX-251 Tiny") RTOS2=RTX51.DLL ("RTX-251 Full") TDRV1=BIN\STCMON251.DLL ("STC Monitor-251 Driver") LIC0=47PLD-82KGZ-788FE-59LW8-82HWT-85L3V [ARM] PATH="D:\keil_IDE\MDK\ARM\" VERSION=5.39 PATH1="C:\Program Files (x86)\Arm GNU Toolchain arm-none-eabi\11.2 2022.02\" TOOLPREFIX=arm-none-eabi- CPUDLL0=SARM.DLL(TDRV16,TDRV17,TDRV18) # Drivers for ARM7/9 devices CPUDLL1=SARMCM3.DLL(TDRV0,TDRV1,TDRV2,TDRV3,TDRV4,TDRV5,TDRV6,TDRV7,TDRV8,TDRV9,TDRV10,TDRV11) # Drivers for Cortex-M devices CPUDLL2=SARMCR4.DLL(TDRV4) # Drivers for Cortex-R4 devices CPUDLL3=SARMV8M.DLL(TDRV2,TDRV4,TDRV6,TDRV7,TDRV8,TDRV12,TDRV13,TDRV14,TDRV15) # Drivers for ARMv8-M devices BOOK0="HLP\RELEASE_NOTES.HTM" ("Release Notes for MDK 5.39",GEN) BOOK1="HLP\ARMTOOLS.chm" ("Complete User's Guide Selection",C) TDRV0=BIN\UL2CM3.DLL("ULINK2/ME Cortex Debugger") TDRV1=BIN\ULP2CM3.DLL("ULINK Pro Cortex Debugger") TDRV2=BIN\ULPL2CM3.dll("ULINKplus Debugger") TDRV3=BIN\CMSIS_AGDI.dll("CMSIS-DAP Debugger") TDRV4=Segger\JL2CM3.dll("J-LINK / J-TRACE Cortex") TDRV5=BIN\DbgFM.DLL("Models Cortex-M Debugger") TDRV6=STLink\ST-LINKIII-KEIL_SWO.dll ("ST-Link Debugger") TDRV7=NULink\Nu_Link.dll("NULink Debugger") TDRV8=PEMicro\Pemicro_ArmCortexInterface.dll("Pemicro Debugger") TDRV9=SiLabs\SLAB_CM_Keil.dll("SiLabs UDA Debugger") TDRV10=BIN\ABLSTCM.dll("Altera Blaster Cortex Debugger") TDRV11=TI_XDS\XDS2CM3.dll("TI XDS Debugger") TDRV12=BIN\ULP2V8M.DLL("ULINK Pro ARMv8-M Debugger") TDRV13=BIN\UL2V8M.DLL("ULINK2/ME ARMv8-M Debugger") TDRV14=BIN\CMSIS_AGDI_V8M.DLL("CMSIS-DAP ARMv8-M Debugger") TDRV15=BIN\DbgFMv8M.DLL("Models ARMv8-M Debugger") TDRV16=BIN\UL2ARM.DLL("ULINK2/ME ARM Debugger") TDRV17=BIN\ULP2ARM.DLL("ULINK Pro ARM Debugger") TDRV18=Segger\JLTAgdi.dll("J-LINK / J-TRACE ARM") DELDRVPKG0=ULINK\UninstallULINK.exe("ULINK Pro Driver V1.0") LIC0=LSNXV-PUMQS-PCAJ8-33SHE-DYASX-BAVUI - 解释:当打开工程时,UV4.exe解析扩展名,加载对应路径的工具链(如STM32工程使用MDK_Path)。
- 核心修改:在
- 步骤3: 应用配置并测试
- 保存文件后,重启Keil UV4.exe。
- 测试方法:打开不同类型工程文件(如C51的
.uvproj),观察是否自动加载正确环境。 -
验证指标:无报错提示,编译器选项显示目标工具链(如C251的编译器菜单)。
总结:最终通过简单配置文件修改,实现UV4.exe全兼容,支持无缝开发STM32、C51和C251项目。
更多推荐



所有评论(0)