系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
前言
认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!推荐开发经验及方法博客专栏:
https://blog.csdn.net/qq_35635374/article/details/138256324
本文先对开发经验及方法导读做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
一、搭建工程开发环境专题
介绍工程开发环境的搭建及经验,包括电脑及嵌入式硬件的选型、ARM/X86Ubuntu系统开源应用层开发环境搭建、Ubuntu系统以太网局域有线、无线网络通讯环境搭建、Ubuntu系统安装针对项目支持的安装包和库、搭建Ubuntu机器人编辑、编译、运行环境。
https://blog.csdn.net/qq_35635374/article/details/121314782
三方库的调用方法
介绍工程代码中调用三方库的方法与步骤
https://blog.csdn.net/qq_35635374/article/details/138732734
二、代码程序设计专题
1、C++开发知识树的阶段
介绍C++开发知识树的进阶路径,包括C++工具使用的入门阶段和C++代码核心思想的进阶阶段。其中,
C++工具使用的入门阶段要理解C++的语法基础及新标准特性、数据结构与算法、linux系统平台的基础操作、C++常用监测内存泄漏的工具及使用等等。
C++代码核心思想的进阶阶段要理解编码规范、程序设计kiss原则、设计模式等等。
https://blog.csdn.net/qq_35635374/article/details/132416744
2、程序设计Kiss原则
介绍工程代码设计的原则,包括代码开发原则和运维原则两大类
其中,
开发原则包括最少知识原则(Law of Demeter)、单一责任原则(Single Responsibility Principle)、开闭原则(Open Closed Principle)、接口隔离原则–对外接口设计、低耦合原则(Minimize Coupling)\依赖倒置原则(Dependence Inversion Principle)里氏替换原则(Liskov Substitution Principle)–继承规范、避免创建你不要的代码 Avoid Creating a YAGNI (You aren’t going to need it)、避免重复原则(DRY – Don’t repeat yourself)、抽象原则(Abstraction Principle )、简单原则(Keep It Simple and Stupid )、最小惊讶原则(Principle of least astonishment)、关注点分离(Separation of Concerns)、最大限度凝聚原则(Maximize Cohesion)、隐藏实现细节(Hide Implementation Details)等等
运维原则包括开闭原则(Open/Closed Principle),持续代码维护(Write Code for the Maintainer)、避免过早优化(Avoid Premature Optimization)、拥抱改变(Embrace Change)、鼓励相互review讨论的开发方式、每一次MR提交都是最小改动、代码管理的核心思想等等
https://blog.csdn.net/qq_35635374/article/details/131840078
3、数据结构与语法规范
介绍C/C++开发的数据结构与语法规范,包括命名规范、函数规范、注释规范、代码格式排版规范、错误处理方式、代码组织(物皆有其位,而后尽其位)、特殊的技巧及一些工具,如clang-format代码格式规范工具的安装及配置
https://blog.csdn.net/qq_35635374/article/details/131611913
4、CPP代码检查工具
提高C++的代码质量方法,仅仅靠个人编程能力难以保证团队整体的代码质量,需要使用一些代码检查工具保证基本质量。
本文介绍CPP代码的检查工具及使用步骤,包括GCC编译器工具、Cppcheck工具、gbd调试器、SonarCube等等。
https://blog.csdn.net/qq_35635374/article/details/133323874
5、架构模式设计层(设计模式)
介绍架构模式设计的相关方法,包括ROS工程代码规范、工厂模式代码设计、命令设计模式、发布订阅设计模式、请求服务设计模式、单例设计模式、适配器设计模式逻辑代码重构及设计的技巧等等
https://blog.csdn.net/qq_35635374/article/details/131611947
6、代码重构
代码重构是开发过程中必不可少的一项工作,项目开发中为了快速响应业务需求往往存在不合理的技术方案与实现,不断积累技术债,技术债的长期累积会导致功能难以二次开发响应新的业务,代码冗余难以维护等等问题,当项目度过攻关期或硬件升级,产品升级时,要借助这些契机进行工程的重构优化工作。
本文介绍了一些工程代码重构的经验与方法,包括分析重构的目的、重构的挑战(难处)、大型\小型重构的程度及方法论、大型代码重构流程等等
https://blog.csdn.net/qq_35635374/article/details/131611967
7、代码设计模式–如何提高代码的运行效率、可读性、可维护性、健壮性?
介绍通过代码设计模式,提高代码的运行效率、可读性、可维护性、健壮性。
理解设计模式作用、介绍23种设计模式的核心思想与具体实现
https://blog.csdn.net/qq_35635374/article/details/132416508
8、【C++ RAII机制】将资源用类进行封装起来,做到资源创建即完成初始化,使用完资源即自动销毁
介绍C++ RAII机制,实现将资源用类进行封装起来,做到资源创建即完成初始化,使用完资源即自动销毁
包括RAII实现原理及步骤、使用C++ RAII的常用场景举例等等
https://blog.csdn.net/qq_35635374/article/details/132280867
9、源代码封装成库Lib的方法
介绍工程发布版本中,各个模块处小包来合成大版本的方法。不同嵌入式平台出小包的方法都不一样,但都和编译系统和工具链相关,需要理解工具链和编译流程的相关理论,本文介绍MCU(lib)和linux(.install文件)出小包或封装成库的方法。
https://blog.csdn.net/qq_35635374/article/details/127326321
10、C库生成指定范围的的随机数
介绍C库生成指定范围的的随机数的方法
https://blog.csdn.net/qq_35635374/article/details/132061881
11、进程中main函数中的argc和argv两个形参的含义及调用原理
介绍进程中main函数中的argc和argv两个形参的含义及调用原理
https://blog.csdn.net/qq_35635374/article/details/124483841
12、关于数据拷贝赋值方法
介绍C++中关于数据拷贝赋值的一些常用方法
https://blog.csdn.net/qq_35635374/article/details/132216857
13、C++实现可变参数的日志打印
介绍C++实现可变参数的日志打印
https://blog.csdn.net/qq_35635374/article/details/133753205
三、操作系统专题
1、常见的系统崩溃原因总结和解决方法
介绍常见的系统崩溃原因总结和解决方法,如
数组越界
使用指针变量不规范,导致的内存泄漏、踩内存而读崩溃
计算机动态内存不够,或内存管理分配的堆栈不够,申请不到内存导致程序无法执行
递归函数的退出条件出错,代码死循环导致并发死锁
大数据的拷贝发生错误
没有线程锁,导致访问共享资源冲突
线程临界区保护,优先级高的线程打断优先级低的线程,恰恰优先级低的线程对时间比较敏感
线程退出失败
https://blog.csdn.net/qq_35635374/article/details/132216947
2、gdb操作系统开发的调试器
介绍操作系统开发的gdb调试器子不同环境中的部署,如ubuntu、vscode、ros等等
https://blog.csdn.net/qq_35635374/article/details/133747237
3、日志系统的搭建及代码debug方法–gdb
产品上线后,开发仍需要持续运维产品在不同业务场景下的表现情况何代码运行情况,以便发现并解决用户的问题。这就需要搭建日志系统、获取埋点打印信息、获取程序崩溃的堆栈信息,快速复现并定位解决问题。
本文介绍在在线与离线debug问题的工具与方法。不同的嵌入式系统平台有不同的debug工具,但是debug的思路都是大同小异的
https://blog.csdn.net/qq_35635374/article/details/127326897
4、操作系统内核原理
介绍操作系统内核原理,包括内核程序和应用进程运行原理、进程管理、线程管理、进程线程调度机制、进程间的通信方式、内存管理、文件系统等等。这是计算原理基础
https://blog.csdn.net/qq_35635374/article/details/132663398
5、多进程、多线程编程应用层开发理论
进一步介绍多进程、多线程编程应用层开发理论及经验,包括
计算机基本原理:硬盘ROM和flash的区别、内存RAM的动态内存的申请(malloc、new)、释放(free、delete)与内存泄露、CPU线程和进程
进程与线程的管理:多线程的实现工具、同步与互斥概念、共享与通信、并发线程常见问题
https://blog.csdn.net/qq_35635374/article/details/131133580
6、Linux系统性能、代码负载分析、代码性能优化
介绍Linux系统性能、代码负载分析及方法,包括linux性能查询指令与火焰图工具、代码性能优化
https://blog.csdn.net/qq_35635374/article/details/135149903
7、使用gcc编译器和clang编译器的区别
介绍编译器的相关知识,包括gcc编译器和clang编译器的区别和部署步骤等等
https://blog.csdn.net/qq_35635374/article/details/133752519
8、VMware虚拟机快照与克隆,保存系统运行环境
介绍虚拟机运行环境保存于切换的方法,VMware虚拟机快照与克隆,保存系统运行环境
https://blog.csdn.net/qq_35635374/article/details/132582915
9、linux内存泄漏排查方法
https://blog.csdn.net/qq_35635374/article/details/139479036
四、通讯专题
1、网络通讯TCP/IP、TCP、UDP的区别
介绍网络通讯中TCP/IP、TCP、UDP的原理及区别,并提供实现源码
https://blog.csdn.net/qq_35635374/article/details/127755885
2、系统平台同一网络下不同设备及进程的话题通讯–DDS数据分发服务中间件
介绍DDS数据分发服务中间件,实现系统平台同一网络下不同设备及进程的话题通讯
https://blog.csdn.net/qq_35635374/article/details/134059856
3、protobuf编码解码与通讯传输原理
介绍protobuf编码解码与通讯传输原理,参照调用接口做部署步骤的理解
https://blog.csdn.net/qq_35635374/article/details/134079665
4、【模块间通讯架构】导航系统中各个层次和模块间的数据隔离、共享与传递方法
介绍导航实时操作系统中各个层次和模块间的数据隔离、共享与传递的常用方法。包括在一个线程中通过C++(编程)语言进行传递、公共的common.h文件或.proto文件中进行传递、使用extern或者get()函数接口进行传递、线程间通讯、进程间通讯、设备之间通讯等等
https://blog.csdn.net/qq_35635374/article/details/121368265
5、键盘控制应用–通过键盘发送控制指令
以键盘控制发送控制小车指令为例,介绍USB设备通讯,提供源码实现辅助理解
https://blog.csdn.net/qq_35635374/article/details/133714440
6、joy遥控手柄通用Linux操纵杆的ROS驱动程序安装
以键盘控制发送控制小车指令为例,介绍USB设备通讯,提供源码实现辅助理解
https://blog.csdn.net/qq_35635374/article/details/127396469
7、工程中局部计时、全局计时、各个模块与系统时间同步的方法
介绍工程中局部计时、全局计时、各个模块与系统时间同步的方法
https://blog.csdn.net/qq_35635374/article/details/127396394
五、工具专题
1、ubuntu的终端窗口分割工具terminator
介绍ubuntu的终端窗口terminator分割工具
https://blog.csdn.net/qq_35635374/article/details/131500153
2、notepad编辑器的使用
介绍一个好用的查看日志文件的编辑器–notepad编辑器
https://blog.csdn.net/qq_35635374/article/details/133353612
3、小米的ac2100的刷机教程
介绍小米的ac2100的刷机教程,在网络中能带你去更远的国度
https://blog.csdn.net/qq_35635374/article/details/131500192
4、docker的介绍及使用–解决应用程序的环境配置问题
介绍docker及使用。Docker是一个开源的应用容器引擎,用于快速部署和管理应用程序。
https://blog.csdn.net/qq_35635374/article/details/138506120
六、主动学习途径及复现工程能力心得
https://blog.csdn.net/qq_35635374/article/details/121185197