为什么很多单片机嵌入式的源码结构很混乱

我经常见到的嵌入式项目就是下图这样的项目结构


而几乎随便一个c++项目都是把源码归拢到src文件里然后各种分层分模块在其内部做的
第三方库虽然不是很统一但是也基本就那几个命名(external,lib,thirdPart等)
想了解一下为什么嵌入式的文件夹结构这么混乱且不同意呢

9 Likes

难道是嵌入式的ide对多层级目录支持不好吗(逃w

4 Likes

都是继承了首版,依样画葫芦:rofl:

2 Likes

不乱啊,一眼就能看出来每个目录作用

Applications:应用代码
BSP:板级支持包,定义板子硬件的,外设的驱动
Core:是内核相关的,CMSIS,引导程序,链接文件等,外设库也放在这里?
Doc:文档
USB_Device:USB 库,可以归入 BSP,因为协议栈比较庞大,单独放出来了
Userlib:是用户自己写的库
cmake:CMAKE 文件

每个厂家的模板不一样,同一个厂家不同时期也有不一样的模板,用户可能也有自己的习惯,所以会显得“乱”

2 Likes

主要我觉得正常c++库的项目结构明显更加清楚,而这么多年居然没流行到嵌入式开发中,猜测是某种妥协?(这可能就是我想了解的),上面那个例子看起来就是源码结构泄露到根目录了.
给出的例子中Core是cubemx自动生成的代码.APP,BSP,Userlib都是项目开发者自己写的或者复制来的厂家驱动,另外USB_Device协议栈比较庞大为啥要单独放出来啊,不都是跟其他第三方库一样的地位嘛,又不会出现空间不够放不下的情况.

问的同学,可惜他的号被清理了 :tieba_087:

4 Likes

可能你说的这些 C++ 库是建立在 Linux 这样的操作系统之上的,底层的资源和驱动已由操作系统全部安排妥当,只要集中精力在目标功能上。

嵌入式 MCU 开发,整个程序从裸机开始跑,工程要从第一块砖头开始造,建筑材料、工人什么的都得自己安排好。

USB 协议栈单独放出来,可能因为 ST 的 USB 库就是单独发布的。

st的cubemx自动生成,懒得改,其他的直接在sdk上开发,也懒得改 :distorted_face:


问就是自动生成的,用户代码基本都新建目录来写了 :distorted_face:

因为底层太多太杂,远没有纯软那么统一