一个自动把Keil C51 工程转换为 SDCC 工程的工具

还是那一句,实在用不了keil , 但是很多例子和代码都是使用keil写的,而且很多源代码都不是utf8编码的,打开直接乱码,也手动转过一些,多了就烦了,这里把转换逻辑写了一个工具,方便自己,方便大家。 

源代码在 https://github.com/aerror2/keil51_to_sdcc

功能特性

🔄 语法转换

  • SFR 声明转换sfr P0 = 0x80; → __sfr __at(0x80) P0;
  • SBIT 声明转换sbit P00 = P0^0; → __sbit __at(0x80) P00;
  • XDATA 声明转换*(unsigned char volatile xdata *) → *(volatile __xdata unsigned char *)
  • 中断函数转换void func() interrupt 1 → void func() __interrupt(1)
  • 位类型转换bit → __bit
  • NOP 指令转换_nop_() → __asm NOP __endasm

🧠 智能寄存器地址解析

  • 自动从源文件中提取寄存器地址定义
  • 支持扫描包含的头文件以获取完整的寄存器映射
  • 内置常用 8051 寄存器地址作为后备
  • 动态计算位地址 (基址 + 位偏移)

📝 代码增强

  • 自动添加 SDCC 兼容的头文件
  • 增强中文注释,添加英文翻译
  • 处理 NOP 宏定义中的逗号操作符
  • 提供详细的转换统计信息

📁 批量处理和项目管理

  • 批量转换: 支持整个目录及子目录的递归转换
  • Keil 项目解析: 自动解析 .Uv2/.uvproj/.uvprojx 项目文件
  • Makefile 生成: 为每个项目生成 SDCC 兼容的 Makefile
  • 多项目支持: 为包含多个项目的目录生成独立的 Makefile
  • 智能路径处理: 自动调整源文件的相对路径

🔤 编码转换和处理

  • 多编码支持: 自动检测和转换 UTF-8、GBK、GB2312、GB18030 等编码
  • 编码预处理: 批量将项目文件转换为 UTF-8 编码
  • 智能编码检测: 使用 chardet 库进行高精度编码识别
  • 备份保护: 转换前自动创建原文件备份

🛡️ 错误处理

  • 支持多种文件编码 (UTF-8, GBK, GB2312, GB18030)
  • 完善的异常处理和错误报告
  • 输入文件验证
  • 转换结果验证

安装要求

  • Python 3.6+
  • chardet (用于文件编码检测)

安装依赖

# 使用 pip 安装依赖
pip install -r requirements.txt

# 或者直接安装 chardet
pip install chardet>=5.0.0

使用方法

基本用法

# 转换单个文件
python3 convert_keil51_to_sdcc.py input_file.h

# 指定输出文件
python3 convert_keil51_to_sdcc.py input_file.h -o output_file.h

批量转换和 Makefile 生成

# 批量转换整个目录(包括子目录)
python3 convert_keil51_to_sdcc.py /path/to/keil_project_directory

# 转换目录并生成 SDCC Makefile
python3 convert_keil51_to_sdcc.py /path/to/keil_project_directory --generate-makefile

# 预处理目录编码(将 GBK/GB2312 转换为 UTF-8)
python3 convert_keil51_to_sdcc.py /path/to/directory --preprocess-encoding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值