成都分销网站建设,网站登记备案,邢台市应急管理局,空投注册送币网站怎么做前言#xff1a;本系列教程旨在如何将自己的代码写的整洁#xff0c;同时也希望小伙伴们懂如何把代码写脏#xff0c;以备不时之需#xff0c;同时本系列参考 正点原子 #xff0c; C代码整洁之道#xff0c;编写可读的代码艺术。
#好的代码的特点 好的代码应该都有着几… 前言本系列教程旨在如何将自己的代码写的整洁同时也希望小伙伴们懂如何把代码写脏以备不时之需同时本系列参考 正点原子 C代码整洁之道编写可读的代码艺术。
#好的代码的特点 好的代码应该都有着几条特性可读性高根据函数命名就知道这个函数是干啥的简单没有复杂的变量英文名大量调用库中封装函数。 方便维护别人在你的代码上加功能好加好上手好移植头文件大量书写宏定义 移植只需要改宏定义引脚即可函数功能单一精简函数定义几百行参数很多永远 没有 十几行函数代码的好理解。 调用函数库统一(没有二次封装函数没有带位操作跟库函数混着用)没有带位操作程序中统一调用库函数带位操作确实快现对于库函数但是不好上手没有重新编写函数如果放着现有的库函数不用重新赋值寄存器写新函数还没有根据功能命名 上述的这些都是好的代码的特点接下来将从每个类型的变量书写规范开始讲解。
#函数的命名 函数的命名应该把信息或者注释装进命名里面同时每个单词使用下划线 _ 进行连接让在读函数命名的同时就知道你这个函数是什么作用什么功能大致看一下函数体就行了。
void SPI_GPIO_Init(void); 这个函数名即使不看函数体也知道这个函数用来将 SPI通信用到的GPIO 初始化那么如何将代码命名进行规范化。 翻译命名将这个函数的功能翻译成英文在命名里面加入英文的缩写去表示。 外设命名如果用到对应的外设可以在命名中加入所用到的外设。 寄存器命名这个函数里面用到了什么寄存器什么参数也能写到函数名里面。 #代码注释写给别人看也写给自己看 代码注释不仅仅可以用来解释这一行代码什么意思做了什么最重要的是让读你代码的人知道你的写码思想你此时在关联什么你在想什么你要用这些代码去干什么完成什么 当自己编写代码的时候肯定知道自己写这些代码是为了完成什么功能去怎么应用在需求上别人读代码只有眼前每行代码的作用注释在这个时候可以是思维可以是目的。可以是关联应用。
#什么不需要注释 注释在程序中并不是越多越好的大量的注释无关紧要的地方会造成浪费时间去阅读这些注释占用屏幕空间这些注释相对来说是没有价值的。
void Usart_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStructure;//声明结构体变量 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//开启时钟 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//开启复用功能GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_StructInit(GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_9;//TX引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;//IO口用作串口引脚要配置复用模式GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;//选择速度GPIO_InitStructure.GPIO_OType GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;GPIO_Init(GPIOA,GPIO_InitStructure);GPIO_StructInit(GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_10;//RX引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;//IO口用作串口引脚要配置复用模式GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;//选择速度GPIO_InitStructure.GPIO_OType GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;//推挽输出GPIO_Init(GPIOA,GPIO_InitStructure);
} 上述这些注释是没有价值的为什么因为没有提供额外的信息这些作用能从函数里面读出来就可以不用去加写这么多注释是会影响效率的。 总结不要为代码本身能读出来的信息写注释 同时不要为了写注释而去注释总有小伙伴认为一定要写注释为了写注释去写注释从而忽略了写注释本身的作用写注释是为了更好的理解工程而不是写没有意义的注释浪费读你注释的人的时间。
#什么需要注释 注释本身就是一种信息这种信息不是关于函数功能的信息这些信息可以加入见解可以使各种有关经验之谈可以是别人不知道代码的瑕疵缺陷也可以是站在读你代码的人角度写注释或者解释为什么选择A方案而不是B方案。
#ifndef _pid_h_
#define _pid_h_
#include stdio.h
#include board.h
//编写PID应在云台中调用
#define Kp 5.0
#define Ki 5.0
#define Kd 5.0
//这里参数设定有问题云台抖动
typedef struct
{float Velcity_Kp;float Velcity_Ki;float Velcity_Kd;float Error;float Last_Error;float integral;float derivate;int Control_Velocity;
}PID;
void PID_Init(PID*pid, float Velcity_Kp ,float Velcity_Ki,float Velcity_Kd);
float PID_Calculate (PID*pid,float Current_Velocity ,float TargetVelocity);
#endif 上述这些出函数本身带来的信息是值得去注释的这些是对于读你代码的人是有用的是有价值的信息。
#代码缩进问题 使用TAB进行缩进的时候这个键的值可能是4位或者是8位有的小伙伴上面缩进4跟下面8个随便缩进反正不会报错看着确实难受如果使用文本方式打开驱动文件可以发现是跟在KEIL5中阅读的缩进大小是不一样的。 如果代码被不同的编译器打开缩进效果也是不一样的但是如果使用 空格键 代替缩进在大多数编译平台看到的区别都是不大的。 这里在KEIL5中是4位缩进下面使用VSCODE打开相同的源文件 可以看到这里就变成了8位缩进只是因为使用的编译器不同导致效果就不一样了同时附带着汉字乱码改编码格式。 总结如果代码经常移植建议缩进使用空格代替。 欢迎指正希望对你有所帮助