目录

  • 概述
  • 编程语言篇
    • 函数
  • 自定义协议
  • 单片机篇

概述

这篇文章的目的,主要是记录一些编程习惯,以及工作中遇到的一些问题。隔一段时间就看一看,避免同样的错误犯两次,也希望能够温故而知新。

编程语言篇

  1. 维护代码时,要使用现有代码的风格,即使它的风格让你看起来很别扭。

  2. 缩进使用空格代替。以keil为例,有人习惯tab缩进2空格,每次缩进按两次tab。有人习惯缩进4空格。虽说每个人有自己的习惯,但是当合作完成同一个工程时,代码会非常难受。一个解决办法是在keil中设置为空格替换制表符tab:

  3. 左花括号与关键字在同一行(我个人比较喜欢这种风格),如下:

    if() {'''
    }
    
  4. 头文件务必增加条件编译,避免重复包含。
    g_common.h头文件中定义一个结构体

    struct CHARGE_PER_PARA {uint16_t value;uint32_t time;
    };
    

    结果编译报错报大量重复错误:has alreay been decleared in the current scope

    而定义在其他文件就没有问题。最终发现是g_common.h头文件忘记写条件编译,增加后编译通过。

    #ifndef __G_COMMON_H_
    #define __G_COMMON_H_#endif
    

    而之前一直没有发现的原因是,在这个头文件里,没有定义新的类型,全是extern变量和函数声明。

函数

  1. 合法性检查。如传入的参数是否有效、动态分配内存malloc返回的指针不为空等。
  2. 使用if判断时,尽量将异常分支放在if内,正常代码为主体。避免过多嵌套。
  3. 使用const,尤其是不希望被改变的参数,如进行拷贝时的源地址psour

自定义协议

常在中断内接收数据,在主程序中进行协议解析。

  1. 使用帧头帧尾。
  2. 使用校验。
  3. 具备帧超时机制。
  4. 重发机制。
  5. 合理定义帧最大数据长度,判断不要越界。

推荐链接:添加链接描述

单片机篇

  1. 中断内不要进行喂狗操作。
  2. 在上电初始化阶段,不要对flash进行写操作。避免系统上电时电源不稳,导致写失败。
  3. IO外部有上拉电路时,IO避免配置为浮空。当为浮空时,输出低电平,但实测仍然有高电平。
  4. while循环内要谨慎喂狗。
    循环应增加超时机制,确保能够退出。没有超时机制,又一直喂狗,可能因为一些异常造成“死机”。而若不喂狗,至少能够通过复位恢复。
  5. 使用volatile关键字。
    尤其是当程序开启优化时,这一点尤为重要。如中断内置位的标志位、计数值,最好增加volatile修饰。避免因为被优化,导致应用程序中,始终不满足条件。

一些编程习惯和问题记录--不定期更新相关推荐

  1. 前端逻辑练习题+学习记录 不定期更新

    编程题 1.返回数组中最大的数字(reduce函数) largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1 ...

  2. NET常见问题记录(不定期更新)

    1,何时显式实现接口:不想让实现类调用的时候. 代码如下: public interface IMsgSender     {         void Send(string mes);     } ...

  3. 从壹开始前后端分离 [.netCore 不定期更新 ] 三十五║ 完美实现全局异常日志记录...

    缘起 哈喽我是不定期更新的日常,昨天群里小伙伴问到了记录日志,当然,以前我也挖过这个坑,后来一直没有来得及填上,也想着 swagger 一直又有错误信息展示的功能,就迟迟没有添加这个功能,不过昨天夜里 ...

  4. 实习中遇到值得积累下来的编程习惯(持续更新已结束-实习结束进入正式工作)

    出来实习后遇到很多在编程上的问题.有很多是在编程上的小细节,这些细节有些很关键,有些无关紧要,但是均是值得积累下来并不断坚持下去的好习惯.好方法.所以在此积累下来,并持续更新~ magic numbe ...

  5. [刷题记录] luogu网络流24题 及 网络流心得体会 及 经典模型不定期更新

    文章目录 信息汇总表格 飞行员配对方案问题 分配问题 运输问题 数字梯形问题 最小路径覆盖问题 魔术球问题 圆桌问题 试题库问题 深海机器人问题 航空路线问题 火星探险问题 太空飞行计划问题 方格取数 ...

  6. React性能优化记录(不定期更新)

    React性能优化记录(不定期更新) 1. 使用PureComponent代替Component 在新建组件的时候需要继承Component会用到以下代码 import React,{Componen ...

  7. 【不定期更新】游戏开发中的一些良好习惯与技术技巧

    平时programing时想到和积累的一些小技巧,在这里写成一篇日志,欢迎拍砖. <技巧一> 使用二进制位移运算来进行乘数是2的幂的简单整数乘法(除法),因为所有的数据在计算机中都是以二进 ...

  8. 不定期更新,记录一些小知识

    作者:东北大胖子 原文来源: https://tidb.net/blog/c6e3a445 不定期更新,记录一些小知识,欢迎指正,本帖尽量使用文字描述,相关图片尽量粘贴,方便大家搜索~ Mysql向T ...

  9. HANA数据库常用语法记录(不定期更新)

    HANA数据库常用语法记录(不定期更新) 增 -- 2021/06/24 -- Add column to a table ALTER TABLE TEPMLATE ADD (ID BIGINT); ...

最新文章

  1. html让下拉条消失,CSS 实现隐藏滚动条同时又可以滚动
  2. java 过滤器 过滤文件中的文件_Java 使用FileFilter过滤器对文件进行搜索
  3. 【原创】MySQL Connector/C 库的版本选择
  4. SQLi LABS Less-5 报错注入+布尔盲注
  5. Android开发新手常见的10个误区
  6. ArrayUtils
  7. AlgoSec破解license
  8. 沙盘模拟软件_赛事动态 | 第十六届全国职业院校沙盘模拟经营大赛全国总决赛圆满举办...
  9. 《⑨也懂系列:MinGW安装教程Ver.2》著名C/C++编译器GCC的Windows版本
  10. 数字化综合档案管理系统 佰档管家|匠心打造
  11. 造型时尚的快充移动电源,兼容性确实不错,aigo A10S体验
  12. Puppet学习之hiera(8)
  13. 登录mysql报错Failed to connect to backoff 或 Failed to get D-Bus connection: Operation not permitted解决方法
  14. 深度解密阿里达摩院:如何让科技与商业共舞
  15. 软渲染器(Directx11)三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵
  16. @Autowired注解详解
  17. HaploMerger2: 从高杂合二倍体基因组组装中重建单倍型
  18. 我的ubuntu8.04安装经验
  19. python cannot import name ‘sysconfig‘ from ‘distutils‘
  20. 炎炎夏日,漂流去哪漂?评论情感分析告诉你

热门文章

  1. oracle 自动执行存储过程,oracle 自动执行存储过程
  2. 打印html文件都是空白页,我打印时的额外空白页面(IE中除外) – 是我的打印css吗?...
  3. webbrowser控件 加载为空白_深入学习SAP UI5框架代码系列之一:UI5 Module的懒加载机制...
  4. 前端aes加密_前端安全攻防解析
  5. python小白教程-面向小白的Python教程:入门篇(六)
  6. 达奇机器人怎么看电量_圣诞怎么过?看看电影吃点儿特别的
  7. mqtt客户端工具_如何在 Rust 中使用 MQTT
  8. 关联分析研究思路及应用:GWASTWAS
  9. textview 加粗_Android 改变 TextView 内局部样式
  10. fft 相位谱_数值积分——使用FFT来降低计算量