如何组织固件项目

组织一个软件项目有很多好处。首先,它使您在查找模块和文件时变得很容易,而不是浪费时间在周围找东西。其次,有组织的项目不需要不断调整项目make文件或项目属性,从而有助于项目可伸缩性。第三,如果精心组织,开发人员应该能够轻松集成工具,重建其开发环境,甚至更轻松地移植代码。组织代码库的方法有很多,但是在今天的帖子中,我将分享我通常如何组织自己的项目。

当开始一个新项目时,通常您希望对项目有某种顶级组织,以便于查找。多年来,我采用了一个简单但有效的结构,在每个项目开始时我都会立即提出承诺,并且通常会根据项目需求而略有变化。我通常开始的结构如下:

乍一看似乎是不言自明的,但让我解释一下这些功能以及我通常如何使用它们。

Application目录用于存储所有特定于应用程序的代码。这是专门为产品编写的自定义代码。开发人员可以认为这是使嵌入式系统与其他嵌入式系统区别开来的秘密或代码。该文件夹包含应用程序模块以及与之配套的所有配置模块,这些模块有助于使代码可移植和可伸缩。一个人可能想为包含源代码和配置代码创建子目录,但是我经常发现这无济于事,只需要向项目配置添加更多包含路径即可。如果我想进一步组织这些,则只需在实际的IDE环境中进行即可。

说明文件目录用于几种类型的说明文件。首先,Doxygen生成的手册和文件都存储在此目录下。其次,任何有用的其他文档,例如有关用户指南的文字,CRC,输入文件格式,特定于开发的数据等等。

中间件目录存储了项目中使用的所有相关中间件和第三方库。现在,我在这里所做的一件特别的事情是,我经常在此目录中链接git子模块。曾经有一种最佳实践,团队会提取他们使用过的所有内容的副本,并且将其保持静态,以使其永远不会更改,并且始终会有备份。这是一个很好的做法,但是我发现今天包括git子模块,然后检出已标记的修订版更加实用。在项目的每个正式版本中,都记录了所使用的每个库的版本。我喜欢这种方法,因为如果我想保持最新,就可以从子模块中获取最新修订,而不是导出,导入到我的存储库,添加,提交等等。

Project目录仅存储特定于工具链的项目信息。此目录中可能有几件事。首先,可以在不同的工具链中拥有同一项目的多个版本。可能要根据偏好在GCC,Keil,IAR,Visual Studio Code或许多其他环境中拥有或测试他们的项目。其次,可能会有使用相同代码库的不同产品sku,并且为每种产品的特定设置定义了不同的项目。无论如何,将这些东西放在一起放在一个地方可以防止项目结构变得过于混乱。

Tests文件夹是几年前在我的组织流程中不曾存在的文件夹。我一直在极力推动自己采用更具测试驱动力的开发(TDD)固件开发过程。我所有的测试用例代码都存储在此目录下。我使用的确切结构略有不同,但James Grenning的 cpputest-start-project 在github上自动化测试已经变得非常重要,以至于每个项目都应包括此内容(并积极管理和维护测试)。

最后,有实用程序文件夹。就像中间件文件夹一样,该文件夹通常是git子模块的文件夹,可用于访问各种开源工具。例如,我经常将cpputest链接到此文件夹。这样,新开发人员可以检出项目并初始化子模块,并且可以在大多数情况下启动并运行。 (我也为此使用了Docker,但这是另一个故事了)。如果它们不是开源的,有时我还将包括各种工具的安装程序。有时,我什至还会将用Python编写的自定义界面代码放在该文件夹中。

结论

拥有一个组织良好的项目可以帮助开发人员轻松地找到围绕代码的方式,还可以帮助他们随着时间的推移轻松维护该代码。包括测试文件夹之类的文件夹也暗含着开发人员应编写测试用例的隐喻。当然,可以添加其他目录。例如,驾驶员的文件夹。我刚刚发现,如今大多数工具链中的此类越来越多地属于“中间件/库”类别。无论如何,我希望这能帮助您了解如何轻松组织固件项目以及一些可以遵循的流程,这些都是我所建议的良好的现代软件实践。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.