代码风格
代码树风格自洽;遵循现有风格。
C
- C11 (
-std=gnu11),4 空格缩进,K&R 大括号风格,.c/.h 文件中不使用制表符。 - 类型:使用内核的固定宽度类型集(
u8/u16/u32/u64/s8/...,来自types.h)- 不使用 uint8_t 这样的拼写。 - 当类型重要时,每行只声明一个变量;尽可能地进行初始化。
- 每个文件开头都必须包含 SPDX 版权注释块和一个 Purpose 段落,说明该文件存在的原因。未来的读者(和文档生成器)依赖于此。
- 函数注释:约定、参数、返回码 - 特别是每个负数返回值。
- 错误处理:检查、用清晰的报告消息报告、然后回滚 - 绝不能泄露半初始化的设备注册。
汇编
.S文件(预处理):boot.S 和架构跳板是参考标准。在每个入口点注释 ABI。
Shell 命令
- 使用
shell_register_command_ex和工作包标签进行注册,以确保help -w的准确性。 - 单行帮助信息,参数错误时打印
usage:,失败时以非零退出码退出。 - 仅使用 ASCII 字符。
命名
- 文件:
kernel/<area>/core_<thing>.c,drivers/<bus>/driver_<hw>.c,shell/shell_cmds_<domain>.c,fs/fs_<fs>.c- 代码树的布局就是分类标准(文档生成器按此分组)。 - 符号:
<module>_<verb>_<object>(例如driver_block_flush,klog_write,ota_ab_install)。静态辅助函数保持文件局部性。 - 全大写常量带模块前缀(
OC_MB2_TAG_END,SHELL_MAX_COMMANDS)。
限制是设计的一部分
当你添加一个有界表时,限制常量必须附带注释解释该数值(参见 shell.h 中的 SHELL_MAX_COMMANDS - 232->256 的历史记录在定义处有文档)。保持这种纪律:下一个需要调整它的人需要了解背景。
禁止事项
- 没有"留作后用"的死代码 - 删除它;git 会记住。
- 没有无声截断 - 拒绝并给出消息(别名的值是典范:完整存储或拒绝)。
- 没有
// TODO而不带 BUG- 编号或工作包引用。 - 没有新的第三方代码:代码树是原创的,Apache 2.0 许可,且保持不变。