找回密码
 立即注册
查看: 83|回复: 8

基于Clang+LLVM的STC32-MCS251编译器/汇编器/链接器~

[复制链接]
已绑定手机

2

主题

4

回帖

116

积分

注册会员

积分
116
发表于 4 天前 | 显示全部楼层 |阅读模式
基于Clang+LLVM移植MCS251的移植而来。

已经实现了LLVM大部分的功能,包括大部分C23新特性和LLVM IR,基本可以替代SDCC

ELF文件也设计了mcs251的专用格式

使用浮点计算会自动内嵌IEEE 754标准浮点库
自动调用MDU正在做,很快就会完成

内嵌TFPU的内联函数我已实现,但是我手里的单片机没有TFPU暂时无法测试

具体使用方法可以先看内置的简易Demo工程或者让AI读一下,具体使用手册我还在写


具体代码可以看https://github.com/PhyEx-ux/llvm-project/
因为编译器为Clang底层,体积较大,请从github release下载
有问题可以论坛留言,github提交issue或者发邮件给我 Dewe.liu@qq.com



FF00.1版本更新
MCS251(STC 8/16/32 位单片机)LLVM 工具链,双平台发布包 + 能力演示 Demo。
  • 提交 cad7f0ab1f3221f2a18de62bb38d6c4b6b45df55(分支 minimal-isr)
  • 构建:Release / clang;lld / MCS251 实验目标 / ASSERTIONS=OFF
  • Windows 版同源交叉构建(x86_64-w64-mingw32-g++-posix),无额外源补丁
本版新增能力
  • *_Bool 作函数参数
  • binary32 浮点全局存储
  • lld 地址级静态参数槽可重入检查 —— --isr-preemption-config、--link-facts、
    --isr-reentrancy=off|warn|error、--isr-reentrancy-coverage=allow|require;

2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

已绑定手机

2

主题

4

回帖

116

积分

注册会员

积分
116
 楼主| 发表于 4 天前 | 显示全部楼层

写一下部分用法

1. Clang(编译器前端)

目标与语言

参数 说明
--target=mcs251-unknown-none 目标(必选;裸机无 OS)
-std=c2x C23;-std=c11 亦常用
-fmcs251-keil Keil 语法:启用 bit 关键字(typedef bit BOOL 等)。
-O0 / -O1 / -O2 优化档。

内存模型

参数 说明
-Xclang -mcs251-memory-contract=1,2,32,8,1 可换用 -mcs251-memory-model=xsmall,见映射表

五元组字段:(TransportVersion, ASLayoutVersion, AS0Bits, Placement, ExecutionContract)

-mcs251-memory-model= 元组 AS0Bits Placement
tiny 1,2,16,1,1 16 1
xtiny 1,2,16,8,1 16 8
small 1,2,32,1,1 32 1
xsmall(默认) 1,2,32,8,1 32 8
large 1,2,32,3,1 32 3

文件头与诊断

参数 说明
-resource-dir <dir> 默认指向 lib/clang/24
-Werror=unknown-attributes 必开,错误机制还没做完
-Wall -Wextra 常规

输出形态

参数 说明
-S -emit-llvm <src> -o <.ll> 输出LLVM IR中间语言
-c 直接出 .o

2. llc(编译器后端)

MCS251 专属

参数 说明
-mtriple=mcs251 目标指令集(等价 --mtriple
-mcs251-memory-contract=1,2,32,8,1 必须与 clang 侧一致
-mcs251-memory-model=<tiny|xtiny|small|xsmall|large> 模型名入口(效果与 -mcs251-memory-contract等同;二选一)
-mcs251-object-format=elf 输出 ELF 文件

通用

参数 说明
-filetype=obj 输出 .o 文件

3. ld.lld(链接器,-flavor mcs251

ld.lld -flavor mcs251 [布局参数] [输出参数] <.o …按依赖顺序…> <crt-*.o> -o <.elf>

区域布局(--area-start=<区>=<地址>

语义
HOME=0xff0000 保留基址
VECS=0xff0003 向量区
BOOT=0xff0500 启动区
CSEG=0xfe0400 代码窗起点(按 EEPROM=1K 预留推导)
XINIT=0xfff400 xdata 初始化地址
XDATA_INIT=0xfff600 同上第二段
XSEG=0x010000 片上 XDATA 窗起点(12K128: 0x010000-0x011FFF)

窗口与容量

参数 说明
--edata-end=0x0fff EDATA 上界(12K128 内部 4KB:0x000000-0x000FFF)
--xdata-size=0x2000 XDATA 容量(12K128 片上 8K)
默认布局;越界会触发 XDATA capacity … exceeds --xdata-size 
--flash-base=0xfe0400 ROM 基址(必须与烧录时 EEPROM 预留一致
--flash-size=0x1fc00 ROM 大小

输出与选项

参数 说明
-o <file> 输出 ELF
--map=<file> 全量 map
--map-json=<file> map 的 JSON 形态
--keep-symbols 使用 keep-symbols 语法
--placement-report=<file> 报告(placement report text v1 字节格式)
--verify-placement 链接器自验证

4. llvm-objcopy(格式处理)

参数 说明
-O ihex <.elf> <.hex> 转换为 Intel-HEX
--dump-section .mcs251.load.0=<bin> 转换为 静态指令
-O binary --only-section=.text <exe> <bin> 提取编译器版本信息
回复

使用道具 举报 送花

已绑定手机

1

主题

8

回帖

113

积分

注册会员

积分
113
发表于 4 天前 | 显示全部楼层
好家伙,避开的方案扭头就被做出来了,大佬,聊一聊实机测试方案呗
回复

使用道具 举报 送花

已绑定手机

2

主题

4

回帖

116

积分

注册会员

积分
116
 楼主| 发表于 4 天前 | 显示全部楼层
Hayi*** 发表于 2026-9-19 14:28
好家伙,避开的方案扭头就被做出来了,大佬,聊一聊实机测试方案呗

用的32G12K128的PDIP,用面包板随便搭了搭,加上示波器测的,具体代码可以看Release里有个Demo
回复

使用道具 举报 送花

已绑定手机

1

主题

8

回帖

113

积分

注册会员

积分
113
发表于 4 天前 | 显示全部楼层
lk852*** 发表于 2026-9-19 14:34
用的32G12K128的PDIP,用面包板随便搭了搭,加上示波器测的,具体代码可以看Release里有个Demo ...

debug打断点的方案,目前有点想法
回复

使用道具 举报 送花

已绑定手机

2

主题

4

回帖

116

积分

注册会员

积分
116
 楼主| 发表于 4 天前 | 显示全部楼层
Hayi*** 发表于 2026-9-19 15:03
debug打断点的方案,目前有点想法

我是纯Linux开发的,暂时没办法直接调试断点,现在都是在用串口Debug
回复

使用道具 举报 送花

已绑定手机

1

主题

8

回帖

113

积分

注册会员

积分
113
发表于 4 天前 来自手机 | 显示全部楼层
lk8520157 发表于 2026-9-19 15:39
我是纯Linux开发的,暂时没办法直接调试断点,现在都是在用串口Debug

通过单片机辅助程序和Python转译为gdb协议做debug
回复

使用道具 举报 送花

已绑定手机

19

主题

3551

回帖

8057

积分

论坛元老

积分
8057
发表于 4 天前 | 显示全部楼层
又有新的编译器了,支持c++吗
回复

使用道具 举报 送花

已绑定手机

2

主题

4

回帖

116

积分

注册会员

积分
116
 楼主| 发表于 4 天前 | 显示全部楼层
so*** 发表于 2026-9-19 20:12
又有新的编译器了,支持c++吗

C++前端还没完善,C现在也有些问题,解决了才能上C++
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-9-23 16:10 , Processed in 0.074439 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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