压力曲线
...
c代码命名规范
芯片AES加密密钥生成工具前言: 嵌入式单片机开发,为了防止别人将芯片内的代码读取出来通过反编译手段拿到源码,常用的手段是对芯片和烧录文件进行加密。大部分的芯片厂商都会提供一个加密烧录和配置文件的工具。这个工具一般需要你填写一定长度的密钥,如果密钥填写得太有规律比如:123456,或项目名+版本号等,这样的密钥对公司来说极度不安全,如果被对手知道别人很可能直接破解出你的源码,然后抄一下你的板就和你一模一样出货了,别人省去了开发成本何乐不为呢?所以本文介绍一种通过AES加密算法将明文转换为密文的工具制作。AES加密算法目前没有破解办法,据我所知微信小程序就用到了这种加密算法。 1 模块构成 制作这样的工具只需要三个模块即可完成,AES加密算法模块、芯片加密模块、GUI模块。本文使用Pathon3语言开发。 2...
SVN软件开发日志规范
SVN SVN软件开发日志规范前言: 写代码的好习惯除了言简意赅的注释外,还有完善且必要的日志。注释主要是对代码内的模块或功能函数、算法、逻辑框架等进行必要简明的说明,它关注的是”这个“代码里做了什么。而日志需要说明的是这版代码和上一版本改了什么(重点关注代码的升级迭代、用途、风险),和其他代码有啥关系(比如关注是否某些功能模块借鉴或移植于其他项目)。所以日志主要关注的是“这些”代码之间的关系(改动、移植),以及怎么用它,有何风险。所以不要觉得代码里写了足够的注释就不需要写Log了,经验丰富的软件开发们会形成自己完整的一套规范风格。 1...
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...








