驱动开发规范

开发规范

  1. 熟练掌握模块所涉及的硬件设计,如所用的电,GPIO,CLOCK等。
  2. 开发阶段时序一定要符合spec。
  3. 关注负责模块的耗电流,包括工作电流,模块加入前后系统底电流变化。
  4. 新功能和较大的修改需要通过评审。
  5. 整体功能完成后需由硬件部配合验证时序。
  6. 对于因为自己代码出现的编译或者运行时的 warning 都需要处理掉。
  7. 主管及时更新项目表格中的模块调试状态。

编程规范

1: 用 #if XXX #endif 的时候需要在 #endif 中指名对应的是哪个 #if 格式如下:(多个#if时)

void __init msm8226_add_drivers(void)
{
#if NOT_DO_INIT
        msm_smem_init();
        msm_init_modem_notifier_list();
#if JUST_FOR_TEST
        msm_smd_init();
        #if NOT_USE_RPM_SPM_PM
        msm_rpm_driver_init();
        msm_spm_device_init();
        msm_pm_sleep_status_init();
#endif /* NOT_USE_RPM_SPM_PM */
#endif /* JUST_FOR_TEST */
        rpm_regulator_smd_driver_init();
#endif /* NOT_DO_INIT */
}

2: 注释掉的代码如果超过两行请使用 #if 0 的方式。如果使用 #if 0 则需要在后面跟上一个标识,标识后面可以跟上注释,并在对应 #endif 中使用此标识:

void __init msm8226_add_drivers(void)
{
        msm_smem_init();
        msm_init_modem_notifier_list();
        msm_smd_init();
#if 0 //TEST_LABEL: 注释
        msm_rpm_driver_init();
        msm_spm_device_init();
        msm_pm_sleep_status_init();
        rpm_regulator_smd_driver_init();
        qpnp_regulator_init();
        if (of_board_is_rumi())
                msm_clock_init(&msm8226_rumi_clock_init_data);
        else
                msm_clock_init(&msm8226_clock_init_data);
        tsens_tm_init_driver();
#endif /* TEST_LABEL */
        msm_thermal_device_init();
}

3:缩进格式保持和源文件一致,如果是新建文件, 缩进使用4个空格

4:对于不能一眼就看出来的功能或者算法,需要写注释说明功能或者原理等。自己写的代码文件要有说明

5:对于自己定义的对外接口函数需要对其说明,包括功能,参数,返回值,格式如下:

/*************************************************
 * Description: 函数功能、性能等的描述
 * Input: 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
 * Return: 函数返回值的说明
**************************************************/

6:对于数据结构申明,需要在成员后面注明功能等

7:注释的格式要统一起来,[SIMT-姓名-年月日],姓请采用首字母,名字请使用拼音全称,不采用英文命名规则,采用顺序拼写,比如“周靓炯”

注释示例:

[SIMT-zliangjiong-20140101]

8:单行代码也需要用{},比如:

if(ret < 0)
{
    return ret;
}

9:命名要有意义,Review人员需要在codereview或者代码评审的时候去关注

10:代码行最大长度宜控制在70至80个字符以内

长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符),拆分出的新行要进行适当的缩进,使排版整齐,语句可读

if ((very_longer_variable1 >= very_longer_variable12)
    && (very_longer_variable3 <= very_longer_variable14)
    && (very_longer_variable5 <= very_longer_variable16))
{
    DoSomething();
}

11:使用统一的Debug打印函数,规范打印信息,在user版本中把debug信息关闭

12:代码里要做输入验证边界检查,不要让别人犯的错导致我们的程序崩溃(Code Review人员在review时需要关注)

13:降低函数间的耦合度,并提高函数的独立性以及代码可读性、效率和可维护性(Code Review人员在review时需要关注)


原文地址:https://www.cnblogs.com/bill-technology/p/4130908.html