四旋翼工程架构分析
简述
最近在做四旋翼飞行器毕业设计项目,对工程项目的一些经验和感悟分享出来。
项目分析
首先说一下,从0到1做出一个完整的项目是很耗费时间和精力的,因此,四轴项目也是基于本专业学长做过的一些项目的基础上添加一些自己的想法。刚开始学习嵌入式,或者说做项目只是从底层一个模块、一个模块地去写代码,熟悉各种外设的功能、操作方法,以及一些最基本的驱动代码。模块化思想是嵌入式开发中很重要的一个指导思维,嵌入式驱动模块无非就两种:1.驱动模块 2.功能模块;而这些实现的方式都是 .c + .h,从下向上的方向看过去,并不能对整个项目的架构和不足有很深的理解,有的时候需要从上往下看,对整体架构有了把握之后就懂得了取舍、不足、和重点。
下面是从文件架构角度看项目:
从文件目录的角度去看整个项目,对整个产品的功能大致已近了解。总得来说,你要实现什么功能或者希望添加什么功能,只需在 “/” 根目录下添加自己所需要的模块,如:网络模块、GUI/QT模块、文件系统等。而这些模块源码去网上下载就行了,模块源码库的实现方式也是目录+模块(.c + .h)的实现方式。”目录结构“是一个重点,它体现了整个工程的架构,逻辑交互关系,尤其在嵌入式Linux方面,如:UBoot源码分析、Linux源码分析,了解了文件目录的组成层次对整个功能也会有个大致的理解。
改写好的四旋翼工程目录(使用了RTOS):
当一个项目使用了操作系统后(对于嵌入式来讲大多数是RTOS),开发方式有了很大的改变,方法、原理并没有变;不否认使用了操作系统后的工程,更加方便,效率会更高,随之而来需要考虑的方面也会复杂。我认为使用了操作系统了之后,就要以操作系统的思维去看待工程项目,高度抽象所有的OS(不管是RTOS还是Linux),都可以分为:User Mode(用户态)、Kernel Mode(内核态)。如以上目录分析,基于RTOS的嵌入式开发会使驱动代码和应用代码分离开来,这样对开发人员可以更专注的对不同的模块进行开发,工程效率会得到提高。
总得来说,能使用操作系统更好,这样使项目开发效率更高,不过也会有很多问题。如:如何对工程项目划分模块?各个模块如何交互?如何使用RTOS充分发挥其潜力?如何减少漏洞提高可靠性?这些都不是一日之功能理解的,我认为还是需要具体的实践才能对这些问题有个更深入的理解。
总结
总结一下,我认为对待嵌入式产品的项目还是需要深入理解的,因为小的工程方法往往也是大工程中所用的方法。以上的图片分析都是裸机程序加上一个RTOS,本质是利用RTOS的功能提高工程效率,使用了操作系统就要从OS的角度看待问题,能分成小的模块就分,用任务/线程去解决问题。难点之处,就是如何划分模块,任务如何设计,任务间通信,等等一系列的问题。这些问题的解决还是需要不断的学习、实践。