找回密码
 立即注册
查看: 517|回复: 13

自制 TinyForge - 单片机制作·仿真·调试一体化 IDE,直接使用STC虚拟硬件

[复制链接]
已绑定手机

18

主题

649

回帖

1919

积分

荣誉版主

积分
1919
发表于 2026-8-27 14:17:54 | 显示全部楼层 |阅读模式

TinyForge —— 单片机制作·仿真·调试一体化 IDE 可直接使用STC虚拟硬件

平时折腾单片机,顺手做了个绿色小工具 TinyForge——一个免安装的单片机 IDE,主要是想给刚入门的朋友省点事:不用买开发板、不用装一堆软件,电脑上就能写 8051 程序、直接仿真看效果。

它内置 C 编译器(TCC),PC 小程序直接写;外挂 SDCC/Keil 就能玩 8051。最有意思的是配合 STC 官方「虚拟调试器件」:程序里的数码管、LCD12864 显示,会实时显示在 STC-ISP 的面板上,还能用虚拟键盘按键跟你的程序互动——没有硬件也能体验点灯、按键、显示的乐趣,学会了再上真机,代码不用改。

解压即用,整包丢一个文件夹里就行。下面是用法,欢迎老手多提意见,新手有问题尽管问。


upload 附件:TinyForge.rar

绿色单文件版:整个界面(web)内嵌在 exe 里,无需安装、免注册,解压即用。内置 Tiny C Compiler(TCC)编译器,可直接写 PC 控制台/窗口程序;通过外挂 SDCC / Keil 支持 8051 单片机开发,配自带的 8051 模拟器(TinySim51)实现实时串口交互仿真。

一、目录结构

TinyForge\
├─ TinyForge.exe        # 主程序(界面内嵌,绿色单文件)
├─ examples\            # 示例代码(TCC 控制台 / 8051 串口等)
└─ data\                # 数据目录(配置、工具链、模拟器)
   ├─ config.json       # 软件配置(设置里改,会自动保存到这里)
   ├─ lib\              # TCC 运行库(libtcc1-64.a 等,内置编译器依赖,勿删)
   ├─ RealSim\          # 8051 模拟器 TinySim51.exe(自带,勿删)
   ├─ sdcc\             # SDCC 工具链(可选,放这里自动识别,见下)
   ├─ completion\       # 代码补全库(自动生成/重建)
   └─ tmp\              # 编译临时目录(自动清理)

WebView2 的用户数据与临时文件放在系统 %TEMP%\TinyForgeWebView2\,不占用程序目录,删除程序不留残留。


二、快速开始

  1. 双击 TinyForge.exe 启动(Windows 10/11 自带 WebView2 Runtime)。
  2. 左侧 examples\ 里点开一个示例,右侧编辑。
  3. 工具栏会出现对应平台的按钮组(自动识别代码用的工具链):
平台 按钮 说明
TCC(PC 程序) 编译 F5 内存编译 → 落盘 exe → 运行,printf 回流输出面板
调试 F6 内存编译运行,支持断点 / 步入 / 变量监视
文件夹编译 / 文件夹调试 编译左侧选中的整个文件夹
SDCC(8051) 编译 SDCC 编译出 .hex 文件
调试 编译 → 进 8051 模拟器实时仿真(串口交互)
文件夹编译 / 文件夹模拟 整个文件夹编译出 hex / 模拟运行
Keil(8051) 编译 调用 UV4 批处理编译 .uvproj 工程
调试 工程 hex 进 8051 模拟器

文件夹编译 —— 免工程文件(特色)

TinyForge 没有「工程文件」:一个文件夹就是一个工程。左侧文件树选中文件夹 → 「文件夹编译 / 文件夹调试 / 文件夹模拟」一键处理:

  • 自动递归收集子目录所有 .c / .h,无需手工添加文件;
  • 自动找 main:多文件编译由链接器判定入口,无 main 或多个 main 会明确报错到面板;
  • 产物以文件夹名命名:TCC 出 文件夹名.exe、SDCC 出 文件夹名.hex,落在文件夹根目录,点「打开位置」直接定位;
  • TCC / SDCC 通用;只有 Keil 才需要 .uvproj 工程(调用 UV4 批处理)。

试试:打开左侧 examples\tcc_控制台\multi_工程\(hello.c + util.c + util.h 三文件),选中文件夹点「文件夹编译」——不用建工程,直接出 exe 并运行。

  1. 编译成功后,输出面板会出现 「打开位置: <路径>(点击打开并定位)」 —— 点击即可在资源管理器中定位生成的 exe / hex 文件。

三、8051 开发(SDCC 与 Keil)

SDCC(推荐,免费开源)

TinyForge 不打包 SDCC(体积大、客户需求各异),请自行下载:

  • 官方下载页:https://sdcc.sourceforge.net/(Windows 版,如 sdcc-4.x.x-x64-setup.exe 或解压版)
  • 安装/解压后,目录应包含 bin\sdcc.exeinclude\必须完整,否则 #include <8051.h> 会找不到)。

两种接法,任选其一:

① 放到 data\sdcc(推荐,零配置)
把整个 SDCC 目录放进 data\sdcc\,使结构为 data\sdcc\bin\sdcc.exe。启动软件即自动识别。

② 放在任意位置,手动指定
在 ⚙ 设置 → SDCC 路径 中填写,三种填法都认:

D:\sdcc                  ← 根目录(推荐)
D:\sdcc\bin              ← bin 目录(自动归一)
D:\sdcc\bin\sdcc.exe     ← exe 完整路径(自动归一)

填完保存后,若识别成功,「平台」下拉里 SDCC 变为可选;识别失败会自动禁止选择。

Keil(工程化,可选)

在 ⚙ 设置 → Keil 路径 填写 UV4.EXE 完整路径(如 C:\Keil_v5\UV4\UV4.EXE)。Keil 只能按工程(.uvproj)编译:打开工程源文件或选中工程目录后,点「编译」出 hex、「调试」进模拟器。


四、vSTC 虚拟调试器件库(STC 虚拟器件组帧)

vSTC 是什么:STC-ISP 的「虚拟调试器件」面板(SEG7 数码管、LCD12864、虚拟键盘等)内容经 8051 串口以二进制帧上报。TinyForge 的 vSTC 库把「组帧」封装成一个个 vSTC_* 函数——用户程序只管调用,不碰任何帧字节。真机环境换成 STC 官方 USB-HID/USB-CDC 库即可(帧格式完全一致,代码不用改)。

  • 单头文件库:examples\vSTC\vSTC.h#define VSTC_IMPLEMENTATION + #include 即用,无需额外 .c)
  • 纯协议组帧,不碰硬件:不含初始化代码、不直接写 SFR、不含中断函数
  • 串口发送走客户实现的钩子 vSTC_SendByte(ch);业务 .c 里先包含器件头(SDCC #include <8051.h>,Keil #include <STC8.H> 等)再包含 vSTC.h

当前支持的器件

器件 vSTC 函数
SEG7 数码管(8 位) vSTC_Seg7ShowString(fmt,...) / ShowLong(n,radix) / ShowFloat(f) / ShowCode(cod)
LCD12864(128×64,ST7920 自带 GB2312 字库) vSTC_Lcd12864DisplayOn/Off/Clear / CursorOn/Off / ShowString(x,y,str) / ReverseLine(line)
虚拟键盘(接收方向) vSTC_KeyFeed(ch):主循环喂串口字节,完整按键帧到达返回键值(ASCII),未组完返回 0

其他 STC 虚拟器件(LED、按键、更多外设)在后续版本陆续补充。

快速上手(完整可编译示例)

#define VSTC_IMPLEMENTATION   /* 单文件库:实现编进本文件 */
#include <8051.h>             /* 器件头:提供 SFR(SBUF/RI/TI/SCON...),必须先包含 */
#include "..\..\vSTC\vSTC.h"  /* 共享库相对路径 */

static void uart_init(void) { SCON = 0x50; TMOD = 0x20; TH1 = TL1 = 0xFD; TR1 = 1; TI = 0; }  /* 9600 @ 11.0592MHz */
void vSTC_SendByte(unsigned char ch) { SBUF = ch; while (!TI); TI = 0; }   /* 库要求的发送钩子(客户实现) */

void main(void) {
    uart_init();
    vSTC_Lcd12864DisplayOn();
    vSTC_Lcd12864DisplayClear();
    vSTC_Lcd12864ShowString(0, 0, "Hello!");
    for (;;) {
        if (RI) {
            unsigned char ch = SBUF, k;
            RI = 0;
            k = vSTC_KeyFeed(ch);               /* 组帧:完整按键到达返回键值 */
            if (k) vSTC_Seg7ShowString("%02X", k);
        }
    }
}

怎么跑起来(模拟运行 + STC-ISP 面板实时交互)

  1. 装虚拟串口对(如 com0com),得到相连的两个端口 COM3 ↔ COM2
  2. TinyForge 工具栏「模拟串口」下拉选一端(如 COM3);
  3. STC-ISP → 串口监控选另一端(COM2),波特率选 9600(与示例一致),打开串口;
  4. STC-ISP → 「虚拟调试器件」→ 打开 LCD12864虚拟键盘 面板;
  5. TinyForge 打开 examples\sdcc\02.vSTC\01.kbd_lcd12864.c → 点「8051 模拟运行」;
  6. 在虚拟键盘上点键 → LCD 面板与调试台实时响应(每按一键出现 APP: key=41 'A' 行)。

面板没反应:先看 TinyForge 调试台有没有 APP: key=XX 实时行(有 = 链路通,只是面板没开/没选中)。

注意事项

  • 中文乱码:TinyForge 源码是 UTF-8,ST7920 字库按 GB2312 解析 → 模拟运行里显示内容请用 ASCII;真机 Keil(GB2312 源码)里中文字符串可直接用。
  • 波特率:对模拟器执行速度无影响(虚拟串口只管透传字节);只有接真实物理串口/下载器才需与对端一致。
  • 文件夹运行02.vSTC 目录有多个示例并存(都内联同一实现)→ 文件夹编译会 Multiple definition,请用单文件模式(打开示例 .c → 点「8051 模拟运行」)。
  • 完整键值表、段码表、帧协议见 !src\stc\虚拟调试器件\说明.html

五、8051 模拟器(TinySim51)

TinyForge 自带自编译的 8051 模拟器 data\RealSim\TinySim51.exe

  • 编译出的 .ihx(SDCC)或 .hex(Keil)直接进模拟器仿真;
  • 串口实时交互:调试台输入直接进程序(标准 UART,REN=1 + RI/SBUF 轮询即收),程序 printf 输出实时回调试区;
  • 支持波特率选择、本地操作串口(COM 口透传)、寄存器/器件面板(LCD1602 等虚拟器件)。

五、常用配置(⚙ 设置)

配置 说明
编译选项 TCC 的 -Wall / -W / 优化 / 标准 / 额外参数
平台 SDCC 目标(当前 8051/mcs51);存储模式 small/medium/large;晶振;波特率
SDCC 路径 留空自动探测 data\sdcc;否则按上文三种填法指定
Keil 路径 UV4.EXE 完整路径
串口 8051 模拟器对外透传的本地 COM 口

七、常见问题

Q:平台下拉里 SDCC/Keil 是灰的选不了?
说明没有找到对应的编译器。SDCC:确认 data\sdcc\bin\sdcc.exe 存在,或到 ⚙ 设置里正确指定路径;Keil:确认 UV4.EXE 路径填写正确。

Q:#include <8051.h> 编译报错「cannot open file」?
SDCC 目录不完整——缺少 include\mcs51\ 头文件目录。请使用完整安装版 SDCC(解压版要整个目录一起拷,不能只拷 bin)。

Q:编译出的 hex / exe 在哪?
编译成功后,点输出面板里的「打开位置」即自动打开所在文件夹并选中文件。

Q:调试/编译过程中工具栏按钮变灰点不了?
极少数情况下按钮状态未自动复位(旧版已知问题,新版已加自动复位机制)。若遇到:按 Ctrl+F5 强制刷新界面即恢复(不影响已保存的源码与配置);仍不行就关闭 TinyForge 重新打开。

Q:被杀毒软件误报?
程序是绿色单文件,运行时不释放可执行文件(模拟器/编译器均为静态落盘),临时文件仅写系统 %TEMP%。如遇个别启发式误报,添加信任即可。

Q:8051 程序怎么收发串口?
标准 8051 UART:REN=1 使能接收,RI 标志查询/中断接收,TI 查询发送。模拟器与调试台输入实时互通(参考 examples\sdcc\01.uart_echo)。


八、示例目录

  • examples\tcc_控制台\ —— PC 控制台程序示例(含 __tf_dbg 调试头、多文件工程)
  • examples\tcc_窗口\ —— PC 窗口程序示例(WinMain)
  • examples\tcc_Dll\ —— DLL 编译示例
  • examples\sdcc\ —— 8051 示例(01.uart_echo 串口回显、02.vSTC 虚拟调试器件交互:虚拟键盘→LCD12864/SEG7)
  • examples\keil\ —— Keil 工程示例(seg7 数码管、UART)
  • examples\vSTC\ —— 共享 vSTC 库(8051 常用头,SDCC/Keil 均可 include)
2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

已绑定手机

18

主题

649

回帖

1919

积分

荣誉版主

积分
1919
 楼主| 发表于 2026-8-27 14:20:36 | 显示全部楼层
我提供了框架,关于具体的代码,自己修改就好,因为编译后也是真机hex仿真到串口的东西,只要STC虚拟仪器能认就可以了.19264我这里还是乱码,不过有反应了,小工具会慢慢迭代.主要目的是及其简单的开发并验证业务逻辑,免去了烧写,下载过程.

貌似上面忘记提一嘴,可以代码补齐的,很是友好.虽然vs之类的编译器众多,功能也够强大,但总感觉对新手不够友好.咱这个小玩意主要是针对新手和懒得做板子想快速验证业务的小伙伴.
回复

使用道具 举报 送花

已绑定手机

52

主题

2860

回帖

3147

积分

荣誉版主

积分
3147
发表于 2026-8-27 23:35:27 | 显示全部楼层
提示找不到libgcc_s_seh-1.dll,无法继续执行代码
截图202608272334155374.jpg

点评

更新了,gcc编译的,忘了静态库的.这次好了.  详情 回复 发表于 2026-8-28 04:02
~~~
回复

使用道具 举报 送花

已绑定手机

18

主题

649

回帖

1919

积分

荣誉版主

积分
1919
 楼主| 发表于 2026-8-28 04:02:16 | 显示全部楼层
晓*** 发表于 2026-8-27 23:35
提示找不到libgcc_s_seh-1.dll,无法继续执行代码

更新了,gcc编译的,忘了静态库.这次好了.
回复

使用道具 举报 送花

已绑定手机

82

主题

218

回帖

700

积分

高级会员

积分
700
发表于 2026-8-28 07:38:30 | 显示全部楼层
希望能增加对80251的支持

点评

keil是可以编译的,但模拟就不是了.sdcc的模拟器只能51,而且还有巨坑,print无法完美和串口互通消息,改了源代码才行的.251难哦.没有模拟器可用,自己撸模拟器那是不现实的.  详情 回复 发表于 2026-8-28 11:41
回复

使用道具 举报 送花

已绑定手机

32

主题

416

回帖

2719

积分

金牌会员

积分
2719
发表于 2026-8-28 09:46:52 | 显示全部楼层


近期软件工具大爆发啊!变化运运超过其它。
学习MCU
回复

使用道具 举报 送花

已绑定手机

18

主题

649

回帖

1919

积分

荣誉版主

积分
1919
 楼主| 发表于 2026-8-28 11:41:34 | 显示全部楼层
向*** 发表于 2026-8-28 07:38
希望能增加对80251的支持

keil是可以编译的,但模拟就不行了.sdcc的模拟器只能51,而且还有巨坑,print无法完美和串口互通消息,改了源代码才行的.251难哦.没有模拟器可用,自己撸模拟器那是不现实的.
回复

使用道具 举报 送花

27

主题

152

回帖

1087

积分

金牌会员

积分
1087
发表于 2026-9-4 00:26:24 | 显示全部楼层
TCC怎么断点调试?

点评

行号前面可以点,增加端点  详情 回复 发表于 2026-9-4 02:58
回复

使用道具 举报 送花

已绑定手机

18

主题

649

回帖

1919

积分

荣誉版主

积分
1919
 楼主| 发表于 2026-9-4 02:58:20 | 显示全部楼层
zh*** 发表于 2026-9-4 00:26
TCC怎么断点调试?

行号前面可以点,增加端点
回复

使用道具 举报 送花

5

主题

35

回帖

205

积分

中级会员

积分
205
发表于 2026-9-4 08:37:09 | 显示全部楼层
Win11里,运行 exe文件,弹出错误: error.png
然后出来的界面是空白的。

点评

有Edge或者谷歌的浏览器么.按理说这些都是内置啊.回头我看看这个错误的原因到时候修一下  详情 回复 发表于 2026-9-4 15:38
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-22 22:54 , Processed in 0.081218 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表