c代码文件内布局规范
c代码文件内布局规范 从上到下按如下布局代码: 1 *.h文件内代码布局规范 文件头注释。 文件条件编译宏。 头文件包含。 普通宏定义 结构体定义。 联合定义。 枚举定义。 宏定义。 全局变量声明。 全局函数声明。 宏函数定义。 2 *.c文件内代码布局规范 文件头注释。 头文件包含。 变量定义(按类型分类,从占字节少到字节多,然后是结构体、联合、枚举变量)。 函数定义。
c代码命名规范
c代码命名规范前言: 为了兼容不同供应商的芯片驱动库,最好的办法是使用自定义的数据类型等,这样有利于代码的重用性和移植性。 1 变量命名1.1 命名前缀12345678910111213//类型宏定义,为了屏蔽不同芯片库文件的变量类型名称不一致,增强可移植性typedef _Bool Bool; //!< 布尔类型变量,变量命名时前缀加btypedef uint8_t Byte; //!< 1个字节无符号整型,变量命名时前缀加bytypedef uint16_t Word; //!< 2个字节无符号整型,变量命名时前缀加wtypedef uint32_t DWord; //!<...
c代码Doxygen注释规范
c代码Doxygen注释规范前言: 良好得注释风格利于后期维护和团队协作开发,使得代码逻辑清晰,意图明了。Doxygen是一种能自动提取代码内注释生成版主文档的开源软件,它是跨平台的。非开源项目也许并不需要有这样一份帮助文档,但Doxygen的注释规范也不失为一种好的风格,可以推广遵守。 1 Doxygen注释规范模板1.1 文件注释模板123456789/** * @file 文件名(*.h/*.c) * @brief 该模块功能的简介。 * @details 使用该模块有哪些细节注意等。 * @author 创建该文件的人名。 * @data 该文件的创建日期(2020-03-10)。 * @version 文件或模块版本号(V1.0.0)。 * @copyright 版权所属公司。 */ 若某项无相关的说明,中文写 无 ,英文写 None ,此时末尾不加标点,若有相关的说明,则建议正常使用标点符号,包括句末标点。 1.2 函数注释模板1.2.1 完整格式1234567891011121314151617181920/** *...
一阶低通滤波
一阶低通滤波前言: 在使用单片机开发中,常常会用到的外设包括ADC采样。而采样必然会伴随这随机干扰引起的毛刺噪声,对于需要捕捉采样值突变的系统来说尤其需要减小毛刺突变的影响。从硬件电路和软件算法上都能一定程度的减少噪声达到滤波的目的,本文主要讲解软件使用低通滤波算法来滤波ADC采样值的方法。 1 一阶低通滤波(又叫惯性滤波)算法1.1 算法原理 滤波算法公式: Y(n) = a * X(n) + (1 - a) * Y(n - 1) Y(n):本次滤波结果。a:滤波系数。取值范围为0~1, 值越小越稳定,越大越灵敏。X(n):本次采样值。Y(n - 1):上次滤波结果。 1.2 C代码实现1234567891011//一阶低通滤波#define FO_LOW_PASS_FILTER_SENSITIVE_a 0.8f //一阶低通滤波系数取值范围为(0,1)。值越小越稳定,越大越灵敏,二者难兼顾。#define...
Lua的函数
Lua的函数前言: 最近在学些Lua的函数,之前学的太快导致有些概念性的东西记不住,这次把这些东西梳理下串起来。 1...
模拟PWM波的自适应取阈值算法
模拟PWM波的自适应取阈值算法前言: 单片机开发中,我们常常接触到的波形就是PWM波,一般都是0~3.3V的数字PWM波,很少涉及模拟PWM波。两者有什么不同呢?模拟PWM波不只有高低电平,还有中间的一些变化过程,且波形可能也不是规整的矩形波,再者它的电压可能超过3.3v导致无法直接用单片机IO口识别,PWM无法直接捕获到上升下降沿。 如果你预算充足,开发的设备也不是非常的小型话,可以容纳额外的电路,那么你可以考虑从硬件上增加一些运放电路或整形电路,尽可能将模拟PWM变为数字PWM,如果不行就得考虑串联电阻来分压,然后代码中通过AD采样到数据后进行算法处理。 1 自适应算法1.1 自适应取阈值算法思路: 这里的MAX,MIN,LOW电压值都是不确定的,受传输距离和干扰影响。 1.2...
Leaderf的安装与配置使用
Leaderf的安装与配置使用前言: Leaderf使得Vim可以实现像IDE那样的模糊搜索功能,这篇文章介绍配置和使用的方法。 1 下载安装Leaderf 如果你安装了Vundle, 那么直接再Vimrc中添加指令Plugin 'Yggdroot/LeaderF'等待安装完成即可,如果你没有装Vundle,那直接去github上下载并解压拷贝即可。 需要注意的是Leaderf还依赖与ctags和rg(这个插件全名是Rigrep)插件,如果你还没有装可以去github上直接下载Release版的,将其中的*.exe文件拷贝到与GVim.exe同级目录即可。 2 Leaderf常用指令2.1 查询文件::Leaderf file 默认是从根目录内的文件中查找。 2.2 查询函数: :Leaderf function 默认是再当前文件中查找函数。 2.3 模糊查询字符串: Leaderf...
Vim几种跳转方式
Vim几种跳转方式前言: 以下时我常用的一些跳转指令,用于参考和复习记忆。还有一些后续会更新。 1 文件内跳转1.1 移动光标 普通模式下左h,右l,上k,下j。(可以使用数字+hlkj,实现跳跃式移动)。 1.2 字符间跳转 跳转到当前字符的前面:普通模式下i。 跳转到当前字符的后面:不同模式下a。 字符串间跳转 向右跳:普通模式下跳转到串首w,普通模式下跳转到串尾e。 向左跳:普通模式下跳转到串首b,普通模式下跳转到串尾be(这个似乎没有专门的指令)。 高亮文件内的某字符串所有出现处,并在高亮处跳转:先将光标移动值至目标字符串处按*。 高亮匹配结果中往下跳:n。 高亮匹配结果中往上跳:N。 关闭高亮:noh。 1.3 行内跳转 跳转到行末:普通模式下键入$光标移至行末,普通模式下键入A光标移至行末且进入插入模式。 跳转到行首:普通模式下键入0(^会忽略行首的空格,跳到第一个非空格字符处,0则跳到第一列)光标移至行首,普通模式下键入I光标移至行首且进入插入模式。 跳转到行内某个字符(比如字符a):往后跳f +...
Vim常用指令
Vim常用指令前言: 这篇博文整理记录常用的Vim指令,方便查询。 设置tab为4个空格 :set tabstop=4 设置换行自动缩进为4个空格 :set shiftwidth=4 设置显示行号 :set number 撤销指令(undo) 普通模式下按u 以root权限运行gvim(否则无文件写入权限) 保存文件 :w :w! 退出gvim :q :q! 插入模式 光标字符前进入插入模式: i 光标字符后进入插入模式: a 光标所在行行首进入插入模式: I 光标所在行行末进入插入模式: A 光标下插入新行进入插入模式o 光标上插入新行进入插入模式O 运行dos指令 :!cmd :! dir /w 切换目录 :cd E:\ 打开文件 :edit .\DebugLog.h不错在则新建 隐藏或显示菜单栏 :set guioptions-=m(m小写) :set guioptions+=m 隐藏或显示工具栏 :set guioptions-=T(T大写) :set...
GVim管理“工程”?
GVim管理”工程“?前言: 经常看到新手朋友问Vim怎么管理工程之类的问题,其实这是对Vim的误解,它只是个编辑器而不是IDE,它不负责工程管理。工程管理应该交给CMake之类的(不然你还指望能像vscode那样有WorkSpace功能吗?目前我没发现)。如果你只是想用GVim方便的管理文件和文件夹的话还是能做到的,具体可以用Vim自带的目录树管理插件或用NerdTree之类的插件。 用过之后你可能会郁闷遇到“如何让GVim启动就默认打开某个目录或文件?”,更方便点“如何想让哪个文件或文件夹用GVim启动就能立刻启动?”。这篇博客就是回答这两个问题的。 1 如何让GVim启动就默认打开某个目录或文件?1.1...