goc32:TinyOS 用户程序的 C 编译器

goc32 是 TinyOS 的用户态 C 编译器,也是 goc 前端在 32 位嵌入式方向上的延续。

它刻意不走 libLLVM 路线:

C 源码
  -> goc 前端(纯 Go 的 C 前端)
  -> gocl 生成的 LLVM 风格 IR 文本
  -> native32(纯 Go 的 RV32IM / Thumb 发射器)
  -> clang 只负责汇编
  -> ld.lld 只负责链接
  -> LZ4TOS 用户程序封装

没有 cgo,也没有 libLLVM.dll。clang 和 ld.lld 只出现在最后两步,和“用 clang 做代码生成”是两件事。

本小节文章

文章内容
串口上传用 goc32 编译 .tos,通过 tosput + rx 直接写进 littlefs 的 /bin,再从 shell 运行
API 参考user/lib.h 里的系统调用、文件、时间、内存、GPIO/ADC、屏幕等用户态 API

它适合做什么

  • 给 TinyOS 写 用户态程序:hello、ls、cat、sh、GPIO 小工具、文本界面程序。
  • 目标板:ESP32-C3、QEMU RV32、Cortex-M3、RP2040(Cortex-M0+)、RP2350(Cortex-M33)。
  • 关心“没有 LLVM 依赖”和“体积可控”的场景。

它不做什么

  • 不编译内核;内核仍然由 clang 构建。
  • 不支持浮点、long double、atomics、TLS、内联汇编。
  • 不追求运行速度优先;后端仍以正确性和体积为先。

源码与最新数据在 yafengabc/goc32。