历史上的今天
返回首页

历史上的今天

今天是:2025年01月05日(星期日)

正在发生

2018年01月05日 | C51的程序设计规范

2018-01-05 来源:eefocus

    现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。

    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。

一、注释

   1,采用中文;
   2,开始的注释:   

   文件(模块)注释内容:
   公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;

比如:
/*********************************************************************/
/*公司名称:                                                          */

/*模 块 名:        LCD 模块              LCD 型号:HD44780          */
          */ 
/*功能描述:                                                         */
/*其他说明:                                                         */
/*版    本:
/**********************************************************************/

   函数开头的注释内容:
   函数名称、功能、说明  输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;

/*********************************************************************  
*
* 函 数 名: v_LcdInit
* 功能描述: LCD初始化
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c
* 调用函数: v_Delaymsec(),v_LcdCmd()
* 全局变量:
* 输    入: 无
* 返    回: 无
* 版    本:
***********************************************************************/

    3、程序中的注释内容:

    修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。

二、命名:
    
    命名必须具有一定的实际意义。

1、常量的命名:全部用大写。

2、变量的命名:
    变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。 
    其中变量数据类型:
     unsigned char  前缀 uc   signed char 前缀 sc 
     unsigned int   前缀 ui   signed int  前缀 si
     unsigned long  前缀 ul   signed long 前缀 sl
     bit            前缀 b    指针        前缀 p
     
     例:ucReceivData  接收数据
3、结构体命名:
            
4、函数的命名:
    函数名首字大写,若包含有两个单词的每个单词首字母大写。
    函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;

三、编辑风格

  1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;

  2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如: 
if ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。

  3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。

  4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行
  
  5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。

  6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。

推荐阅读

史海拾趣

台湾奇力(Chip)公司的发展小趣事

奇力公司自创立之初,就致力于LED芯片的研发与生产。在技术积累方面,奇力公司不断引进先进的生产设备和技术人才,通过自主研发和合作创新,不断提升产品性能和质量。随着技术的突破,奇力公司逐渐在LED芯片市场上崭露头角,以其亮度高、性能稳定的产品赢得了客户的信赖。

對餘科技(DIOFIT)公司的发展小趣事

随着科技的不断发展,DIOFIT公司始终将技术创新作为发展的核心驱动力。他们不断投入研发资金,引进先进技术和人才,致力于研发具有自主知识产权的电子产品。在物联网、人工智能等前沿领域,DIOFIT公司取得了一系列突破性的成果,推出了一系列具有竞争力的产品,成为行业内的技术创新引领者。

B&K Precision公司的发展小趣事

随着业务的不断发展,科恩和班意识到电子测试和测量领域的巨大潜力。1951年,他们将公司更名为B&K Precision,并开始扩展业务,涉足其他电子测试和测量领域。工程师们凭借在电视测试设备领域的丰富经验,不断研发新产品,获得了多项专利,并推动公司迅速成为全球电子测量领域的领导者。

CHINFA公司的发展小趣事

在环保日益受到重视的今天,CHINFA公司积极响应国家号召,践行绿色环保理念。公司致力于研发和生产节能、环保的电子产品,通过技术创新和材料替代,减少了对环境的污染和破坏。同时,公司还加强了对生产废弃物的处理和回收利用,实现了资源的循环利用和可持续发展。

Electron Products Inc公司的发展小趣事

随着科技的快速发展,EPI意识到只有不断创新才能在竞争激烈的电子行业中立足。因此,公司加大了对研发的投入,并成功推出了一系列具有创新性和领先性的电子产品。这些产品不仅提升了用户体验,还为公司带来了更多的市场份额和利润。

GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事

随着产品线的不断丰富和市场竞争的加剧,EPI开始积极拓展市场,寻求更广阔的发展空间。公司制定了国际化战略,通过参加国际展会、建立海外销售渠道等方式,成功将产品打入国际市场。同时,EPI还积极与海外企业合作,共同开发新产品,拓展业务领域。

问答坊 | AI 解惑

DSP280x小板: 原理图 +35个例子

dsp280x的板子,类似与最小系统吧,有io口和adc 、pwmn引出,可用JTAG调试。输入电源5v,可以做过基础学习用,板子不是很漂亮,但是基本的内容都可以学习了,包括用作电机的控制等方面。将原理图传上,大家分享。280X的板子还是比较少的,他有个好 ...…

查看全部问答>

MOSFET的选型

MOSFET的选型附件中的MOSFET选型资料来自南方芯源,数学推导挺多的,大家耐心看,…

查看全部问答>

ARM9的USB设备驱动开发相关问题

刚接触驱动,领导让一个月内完成设计编码。 请问应该从哪方面着手呢?有没有哪位朋友能给点建议呀?…

查看全部问答>

为什么 32位处理器这么慢,~~~~(>_<)~~~~

我LPC2132驱动TFT 显示一张图片要很久呢? 总线频率也不低啊!12M,死循环 里面就一个图片的显示函数,而且是16位送数据的,,,,…

查看全部问答>

调试stm32时经常出现"FlashDownloadFailed-"Cortex-M3"

MDK中出现 Error: Flash download failed-"Cortex-M3"的原因及解决办法 出现这处问题通常是MDK中的Flash的编程算法没有配置或没有配置正确, 在主菜单中打开Flash->Configure Falsh Tools配置窗口,切换到“Utilities"页。 按“S ...…

查看全部问答>

STM32相关讨论帖子汇总(设备篇)

Cortex-M3STM32的代码,跑在ram里快?还是跑在flash里快?cortex是怎么用1MHZ实现1.25MIPS的?谁给解释下STM32能跑72M 是真是假?如果Cortex-m3能够 禁止/使能 同一优先级中断全部中断就好了关于现在两种Cortex-M3微控制器抗干 ...…

查看全部问答>

多路输出变压器的变压比怎么计算

最近刚开始接触开关电源,发现反激式开关电源电路中的变压器经常是多路输出的,那么每一路的输出电压与出入电压比值是不是每一路副边线圈与原边的匝数比啊,反馈绕组是不是也一样啊,我也按照这种方法计算过,发现实际值和计算的不一样啊,这个问题 ...…

查看全部问答>

晒WEBENCH设计的过程+TMS470R

TMS470R是安全处理器其电源支持相当复杂,用WEBENCH很轻松就可设计出解决方案来。 首先在单片机里点选TMS470R 点击添加多个负载 占击提交项目要求 点击检视项目 点击创建项目 这时可以产成报告: …

查看全部问答>