欢迎来到天天文库
浏览记录
ID:51825086
大小:1.46 MB
页数:29页
时间:2020-03-16
《嵌入式软件_C语言编码规范.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、ICS35.060L74中华人民共和国国家标准GB/TXXXXX—XXXX嵌入式软件C语言编码规范EmbeddedSoftwareCLanguageCodingSpecification“在提交反馈意见时,请将您知道的相关专利连同支持性文件一并附上”(本稿完成日期:2009-12-23)XXXX-XX-XX发布XXXX-XX-XX实施GB/TXXXXX—XXXX前言本标准由全国信息技术标准化技术委员会(SAC/TC28)提出并归口。本标准起草单位:中国电子技术标准化研究所、珠海南方软件产品检测中心、炬力集成电路设计有限公司本标准主要起草人
2、:26GB/TXXXXX—XXXX引言嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗严格要求的专门计算机系统。嵌入式技术并不是一个独立的学科,它是伴随着微电子技术和计算机技术的发展,微控制芯片功能越来越强大,而嵌入微控制芯片的设备和系统越来越多而发展起来的。嵌入式系统几乎包括了生活中所有的电器设备,如:mp3、手机、数字电视、汽车、微波炉、数码相机、电梯、空调、自动售货机、工业自动化仪表与医疗仪器等。尽管C语言是嵌入式软件开发的主要工具,然而C语言并非是专门为嵌入式系统设计的,一
3、是因为标准C语言编写的软件缺乏安全性;二是因为“标准C语言”太庞大了,很难操作。因此,需要制订针对嵌入式系统软件的编码格式要求。本标准是在理解标准C语言的基础上,结合嵌入式软件的开发实践以及嵌入式软件开发中常见的危险编码方式制订的,着重于软件的安全性、可读性。既可作为嵌入式软件开发中的编码要求,也可作为软件交付时验收方的验证要求。在要求条款中,“应”标示的要求是必须符合的,“宜”标示的要求是可选择符合的。26GB/TXXXXX—XXXX嵌入式软件C语言编码规范1 范围本标准规定了使用C语言编写嵌入式软件的编码格式要求。本标准也提及了软件设
4、计人员应该注意的与编码相关的事项。本标准适用于嵌入式软件生存周期的编码阶段,主要供具有C语言编程能力的软件编码人员使用。2 规范性引用文件下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅所注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T15272 程序设计语言 C3 术语和定义GB/T15272中界定的以及下列术语和定义适用于本文件。3.1 单边作用sideeffect指在表达式执行后对程序运行环境可能会造成影响。赋值语句、自增等操作都是典型的具有单边作用的操作。4 编码
5、格式要求4.1 总体要求4.1.1 编程前应阅读硬件电路和芯片资料――熟悉芯片的各种内存、寄存器地址、中断服务、定时器、通讯接口等功能,必要时将相关信息加入程序注释中。4.1.2 编程中应注意程序的存储空间――如指令空间大小、数据空间大小、堆栈空间大小等是否超出系统有关限制。4.1.3 使用联合体时,应明确该编译器联合体存储的细节――如联合体的末尾有多少个填充单位、联合体的各个成员如何对齐、多字节的数据类型高低字节如何排放顺序等。4.1.4 宜注意硬件系统复位和软件复位的方法和区别――在程序中宜使用芯片提供的看门狗功能实现硬件系统复位。2
6、6GB/TXXXXX—XXXX1.1.1 宜注意CPU对各种存储器的访问速度――在程序中宜利用各种硬件设备自身的特点来提高程序效率。1.1.2 应注意所使用的编译器的位数,支持的C语言标准,调试程序所占用的内存,兼容性等特点。1.1.3 应注意编译器处理不同数据类型的原则及有关细节――如static局部变量将在内存数据区中生成,而非static局部变量将在堆栈中生成。1.1.4 应注意程序开发调试环境和实际应用环境的区别。1.1.5 应用程序宜使用操作系统驱动程序来调用硬件端口。1.2 内存空间管理类1.2.1 在使用malloc等其它函
7、数获取内存时,应判断申请内存是否成功。1.2.2 动态内存的申请与释放应配对,防止内存泄漏。应用场景主要包括:a)过程/函数中分配的内存,在过程/函数退出之前要释放;b)过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。错误用法示例:intexample_fun(BYTEgt_len,BYTE*gt_code){ BYTE*gt_buf; gt_buf=(BYTE*)malloc(MAX_GT_LENGTH); ... /*globaltitlelengtherror*/ if(gt_len>MAX_
8、GT_LENGTH) { returnGT_LENGTH_ERROR;//退出之前没有释放gt_buf } ... //otherprogramcode}正确用法示例:inte
此文档下载收益归作者所有