历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2019年12月17日 | avr单片机c语言编程风格介绍

2019-12-17 来源:elecfans

  摘要:作为一个初学者如何具有良好的程序设计风格呢?下面小编将以avr单片机介绍它的c语言编程风格。

  C语言编程风格介绍

  1.变量定义

  在定义变量时,前缀使用变量的类型,之后使用表现变量用途的英文单词或单词缩写,且每个单词或缩写的首字母大写,各种前缀缩写如下:


  无符号变量使用 u8,u16,u32;例:unsigned char u8Temp;

  有符号变量使用 s8,s16,s32;例:char s8Temp;

  浮点数变量使用 f32,d64;例:float f32Temp;

  结构体变量使用 st;例:struct Temp stTemp;

  字符串变量使用 s;例:char sTemp;

  数组变量使用 a;例:unsigned char aTemp[10];

  指针变量使用 p;例:unsigned char *pTemp;

  枚举变量使用 e;例:enum Temp eTemp;

  2.宏定义

  对于宏定义使用大写+下划线的方式。

  3.程序排版

  一行程序的开始使用tab键进行对齐,一行的中间使用空格键进行对齐。

  这样防止不同的编辑工具打开时,造成代码混乱。

  4.注释的书写

  这里注释分为函数头注释,程序中代码注释,

  函数头注释使用如下形式

  /*

  *Name:

  *DescripTIon:

  *Created:

  *Author:

  */

  这四项必选,其他的如函数的传入传出参数,视函数的需要适当增加。

  5.测试代码

  在编程的同时,需要注意添加适当的测试代码,这样可以减轻以后测试代码时的工作量。

  AVR c语言优秀编程风格

  文件结构

  模块化的程序应该是有一个很好的程序结构的。AVR C语言程序有两种用户文件,.c程序文件,.h头文件,程序中编写过程中需要在.c文件中包含.h头文件。初学者往往出现重复包含或者头文件包含错误的问题,我当时也时常为这种错误而发愁。下面我以我写的电机驱动例程来给大家说明一下,优秀的编程文件结构。


  这个工程中有8个文件,一个说明文件,如下图:下载程序例子 电机控制案例 。

  avr单片机c语言编程风格介绍

  我写的成型的程序的文件个数基本上都是偶数,因为每一个结构化的函数定义.c文件都会对应一个.h文件。main.c对应config.h。我们来看看各文件的包含关系。下面我们看看这些文件的包含关系与内容:[推荐的文件包含顺序与关系]

  所有.c文件都包含了config.h文件。如: #include “config.h”

  在config.h 中有如下代码:

  #include “delay.h”

  #include “device_init.h”

  #include “motor.h”

  这样做就不容易出现错误的包含关系,为了预防万一,我们还引入了宏定义与预编译。如下:

  #ifndef _UNIT_H__

  #define _UNIT_H__ 1

  //100us

  extern void Delay100us(uint8 n);

  //1s

  extern void Delay1s(uint16 n); // n 《= 6 ,when n==7, it is 1.

  //1ms

  extern void Delay1ms(uint16 n);

  #endif

  第一次包含本文件的时候正确编译,并且#define _UNIT_H__ 1,第二次包含本文件#ifndef _UNIT_H__就不再成立,跳过文件。


  预编译还有更多的用途,比如可以根据不同的值编译不同的语句,如下:

  //#pragma REGPARMS

  #if CPU_TYPE == M128

  #include 《iom128v.h》

  #endif

  #if CPU_TYPE == M64

  #include 《iom64v.h》

  #endif

  #if CPU_TYPE == M32

  #include 《iom32v.h》

  #endif

  #if CPU_TYPE == M16

  #include 《iom16v.h》

  #endif

  #if CPU_TYPE == M8

  #include 《iom8v.h》

  #endif

  #include《filename》 与 #include “filename” 的区别 :前者是包含系统目录include下 的文件,后者是包含程序目录下的文件。


  变量名与函数名

  变量以及函数命名应该按照尽量短,按需长,具有实际意义。可以通过下划线或者大小写结合的方法组合动词和名词组成变量函数名。下面对比好的命名方法与不好的命名方法:

  1.好的: Delay100us();

  不好的: Yanshi();

  2.好的: init_devices();

  不好的: Chengxuchushihua();

  3.好的: int temp;

  不好的: int dd;

推荐阅读

史海拾趣

Global Mixed-Mode Technology Inc公司的发展小趣事
三相缺相报警灯电路的维护周期和注意事项应根据实际情况来制定。一般来说,建议定期检查电路的连接情况、继电器的动作情况以及报警灯的工作状态等。同时,还需要注意保持电路的清洁和干燥以防止短路或腐蚀等问题的发生。在维护过程中应严格遵守操作规程和安全规范以确保人员和设备的安全。
Heyco公司的发展小趣事

Heyco公司成立于1906年(部分资料提及为1926年或1937年,这里以多个资料综合为准),最初在德国柏林成立。起初,公司专注于制造手工工具,随着汽车工业的兴起,Heyco迅速转型为汽车装配线所需工具的生产商。在二战后,Heyco抓住了汽车工业快速发展的机遇,进一步扩大了生产规模,不仅为德国本土汽车制造商如宝马、奥迪、大众和梅赛德斯奔驰提供定制工具,还逐渐拓展到国际市场。这一时期,Heyco凭借其高质量的产品和卓越的服务赢得了市场的广泛认可。

Ferranti Electric Inc公司的发展小趣事

为了更好地满足全球客户的需求,Ferranti Electric Inc公司积极实施全球化战略。公司不仅在英国本土拥有生产基地和研发中心,还在全球范围内设立了多个分支机构和办事处。通过全球化布局,公司能够更好地了解不同市场的需求和特点,为客户提供更加定制化的产品和服务。同时,公司也积极参与国际竞争和合作,提升其在全球电气行业的影响力。

DAPAudio公司的发展小趣事

随着公司产品的不断成熟和市场的逐渐扩大,DAPAudio开始将目光投向国际市场。通过与国际知名品牌的合作和自身的市场拓展努力,DAPAudio的产品逐渐进入欧美等发达国家和地区的市场。在国际市场上,DAPAudio凭借其卓越的产品性能和优质的服务赢得了广泛的赞誉和认可。

科达嘉CODACA公司的发展小趣事

科达嘉电子创建于2001年,起初是一家专注于功率电感、共模电感的研发、生产与销售的初创企业。在电子行业激烈的市场竞争中,科达嘉凭借对电感技术的深入研究和不断创新,逐渐赢得了市场的认可。公司团队经过近二十年的努力,从一个小型创业公司发展成为拥有多家子公司的集团企业,员工总数超过900人,厂房总面积达到30000平方米。

DCX-CHOL Enterprises公司的发展小趣事

为了进一步拓展业务领域和提升竞争力,DCX-CHOL Enterprises开始积极探索跨界合作的可能性。公司与多家知名企业和研究机构建立了战略合作关系,共同开展技术研发和产品创新。通过跨界合作,DCX-CHOL Enterprises不仅获得了更多的技术支持和市场资源,还拓宽了视野和思路,为公司未来的发展注入了新的活力。同时,公司还积极参与行业协会和组织的活动,加强与其他企业的交流与合作,共同推动电子行业的发展和进步。

问答坊 | AI 解惑

12月26日,年终盘点:3G时代嵌入式技术的最新应用讲座(深圳)

嵌入式是当前发展最快、应用最广、最有发展前景的信息技术应用领域之一,2009年在金融危机的阴影下,中国嵌入式技术却是大展宏图的一年,伴随着移动与宽带市场继续高速增长和LTE成为公认的3G演进方向,传统电信运营商在终端市场的争夺战也达到了白 ...…

查看全部问答>

CLSID_RemoteDataAccess对应的是哪个DLL文件啊

if (dlgPush.DoModal()) { //得到pCERDA接口 HRESULT hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA); ASSERT(hr == S_OK); ASSERT(pCERDA != NULL); 执行到ASSERT(h ...…

查看全部问答>

单片机的引脚如何定义呀?/

看一下这段代码: #include   #define   TRUE  1 #define   FALSE  0 #define   uchar   unsigned  char #define   uint    unsigned& ...…

查看全部问答>

请教:关于wince6.0安装问题

小弟在安装wince6.0的时候遇到了问题,请大家帮忙一下: 首先安装VS2005,vs2005 SP1和VS2005 for VIsta补丁,然后在安装wince6.0,但是在安装的过程中,出现了错误提示:“ToolsMsmCA(Error):system package,xml file xxxx”。然后安装就自动回 ...…

查看全部问答>

6.0内核启动问题

搞好了eboot,内核起到一半又不行了,还得麻烦朋友们帮忙看看: Download successful!  Jumping to image at 0x80101000 (physical 0xA0101000)... Waiting for host to connect... Got EDBG_CMD_JUMPIMG Got EDBG_CMD_CONFIG, flags ...…

查看全部问答>

Verilog 计数器 波形仿真

求助Verilog 计数器 波形仿真,在执行到31时会突然变成[] ! 之类的符号如图,我定义也给了8bit,请问问题出在哪了?程序设置?…

查看全部问答>

STM8S在SPI中可以接受16位数据嘛

                                 我使用的是STM8S单片机,在SPI中帧格式是8位的,不知道我是否可以读2次从而来接受16位的数据呢,如果可以,请教一 ...…

查看全部问答>

hc11与hc09对比

如题,hc11与hc09有什么关系,两者相比有什么区别呢?…

查看全部问答>

如何学习模电

本帖最后由 dontium 于 2015-1-23 13:22 编辑 大学的时候,没好好学习模电,电路分析也没学好,那时候只想考高程呢,想起来后悔啊。现在想重新学好模电,下载了很多模拟电路的视频(包括清华杨素行教授讲解的模电),也下载了家电维修方面的视频一 ...…

查看全部问答>

PADS 2007 的问题

我也不知道我选了什么,突然我的那些是穿孔的焊盘看不见了,包括过孔,然后我把软件关了,重新敷铜还是一样,就是焊盘那一块看不见了,但是连接关系还在那里,我是不是什么东西勾了,所以看不见,求大虾指教。谢谢。。。…

查看全部问答>