# 常见错误

## 「找不到文件」

路径写错了。注意两点：

- 工作区根是 `~`，比如 `~/examples/c/app/tetris.c`
- 在命令行页 `cd` 之后，相对路径是相对**当前目录**的

## 「未找到标签: xxx」

链接时找不到这个函数。常见原因：

1. **用了标准库里没有的函数** —— 见「UI 开发」里的接口清单
2. **拼错了函数名**
3. **把函数声明写在了调用之后**（前置声明）

## 「内存错误(PC=…)」+ 一堆寄存器

程序跑飞了：访问了不该访问的内存。排查顺序：

1. **数组越界**（最常见）—— 检查下标范围
2. **指针/地址算错**
3. **函数参数个数不对**（多传/少传都会让栈错位）

报错里的 `PC=00000047` 是出错时的指令地址；下面那行 `MOVE R0, @1 ...`
是**出错的那条指令**，`地址=FFFFFFFC` 这类是它访问的地址。

## 「编译超时」

程序太大或编译器自己陷进去了。见「编译与运行」里的看门狗说明。

## 程序跑起来但窗口是黑的

- 忘了 `ui_2d_present()` —— 每帧画完要提交一次
- 或者**开窗之后才画第一笔**就退出了：`ui_win_open` 之后先把第一帧画出来
- 检查 `ui_2d_clear()` 的颜色是不是全透明的（`0x00......` 的 alpha 是 0）

## 触摸没反应

- 坐标是**画布坐标**，不是屏幕坐标（画布按比例居中，可能有黑边）
- 落在黑边上的点击会被丢掉（这是有意的）
- 检查有没有先 `ui_msg_clear()` 把上一局的残留清掉

## 还是不对

1. 先跑 `vml test` 确认环境正常
2. 把程序缩到最小（只保留出问题的那几行）再跑
3. 让 AI 帮你看：「帮我看看 examples/c/xxx.c 为什么报内存错误」
