import vpsdk.syscall as _syscall import t, c import viperlib # ============================================================ # vpsdk.stdio - 用户态 printf/exit(CExport 裸名,供内核侧代码 # 如 includes/memhub.vp 跨模块引用解析) # # 裸机 App 无 libc:printf 走 viperlib.vsnprintf 格式化 + SERIAL_PUTS # syscall 输出到串口;exit 走 EXIT syscall 通知内核销毁本进程窗口。 # ============================================================ export def printf(fmt: t.CConst | str, *args) -> int: """格式化输出到串口(SERIAL_PUTS syscall),返回输出字节数""" if fmt is None: return 0 buf: t.CArray[t.CChar, 1024] n: int = viperlib.vsnprintf(c.Addr(buf), 1024, fmt, args) _syscall._syscall1(uint64(_syscall.SERIAL_PUTS), uint64(c.Addr(buf))) return n export def exit(status: int): """终止当前进程(EXIT syscall:销毁本进程窗口)""" _syscall._syscall1(uint64(_syscall.EXIT), uint64(status)) export def fflush(stream: t.CConst | t.CPtr) -> int: """刷新输出流:串口/控制台输出都是直写,无缓冲可刷,空操作返回 0 覆盖 libc fflush 的裸机缺失(includes/memhub.vp 的诊断/终止路径 call @fflush); 与 printf/exit 同为 CExport 裸名,供内核侧 includes 跨模块引用解析。 """ return 0