1、具有明确的编码风格
合规的代码具有明确的代码风格,且该代码风格需要提交给认证机构。普通嵌入式代码没有此要求
2、具有明确的编码规范,且需要经过静态分析
合规的代码需要按照MISRA-C等编码规范进行编写,最终经过pc-lint plus等静态分析工具的分析,判断代码是否满足规范,代码经过pc-lint分析后会生成分析报告。
3、不可调用外部库
合规代码不可调用未经过认证的库,比如标准库等集成在编译器内部未经认证的库。如果需要使用标准库则需要自行实现,普通嵌入式代码则没有此类限制,可以随意调用外部库
4、不可使用动态内存分配
在代码编写中不可使用“malloc”及“free”等动态内存分配函数,动态内存分配需要相对频繁的操作内存块,如果操作不当可能导致内存泄漏等问题,所以只能使用静态内存分配。
5、需要使用断言进行输入输出参数检查
函数的所有参数都需要用断言进行严格的检查,如发现输入参数错误,需要及时报错。
6、需要调用安全库及外设检查
在代码运行时需要调用检测函数对内核、flash及ram进行检测。如果发现出错,要及时终止运行。mcu的gpio、timer、uart等使用到的外设也需要定时进行检查,如果发现错误,也需要及时报错。
7、有限制的和外部进行通信
安全类产品和外部模块的消息收发协议需要满足iec61784的要求,如果是单纯的消息广播则不需要对协议进行认证。
8、不能使用goto语句
安全类产品的代码中禁止使用goto语句进行跳转,可以保证代码的结构化。
9、具有单入口单出口
安全类产品的函数必须满足单入口单出口的要求,也就是函数只能有一个人口,不能从函数的中间开始执行。函数只能有一个出口,只能有一个return语句,只能在函数的末尾退出函数,不能在函数的中间执行return语句。
10、需要经过单元测试
安全类产品的代码需要经过单元测试,使代码达到100%的覆盖率。需要进行函数边界值的测试,保证函数的稳定可靠。单元测试需要借助vector等公司的工具进行测试,工具本身也需要通过安全认证。
11、需要经过集成测试
安全类产品的代码需要经过集成测试,通过对一定范围内的函数进行集成测试,模拟安全类功能的输入输出情况,对异常情况进行模拟,保证功能的冗余