想请教一下,关于开发和维护一个跨平台嵌入式应用,应该如何组织项目结构?

2022-06-15 17:01:44 +08:00
 zhttp

背景:
        公司原本只在一个平台(海思)做开发,前同事写的代码是直接调海思 sdk 接口,然后在同一个函数里完成功能,现在要迁移到另一个平台上并且原本海思平台还是要继续维护,所以我把代码重构了,现在大概分成了 app/device 这样子。
问题:
        现在代码重构好了,但是我之前没有维护跨平台应用的经验,不知道接下来该怎么搞,自己埋头大概想了想,由于两个平台的依赖库也不尽相同,想着以如下的目录去维护:
/myproject
        --/app 这个目录下存放与平台无关的业务代码,最终可执行文件也生成在这里
        --/device 这个目录下存放不同平台的接口操作代码,对外提供统一的接口
                --/platform1
                --/platform2
        --/libs 存放不同平台的依赖库
                --/platform1
                --/platform2
        其中 device 单独编译生成.so 动态库。然后修改 app 下的 makefile ,在编译 app 的时候,根据 make 传参确定平台,选择对应的 device 和 libs 中的库文件进行链接。
        目前是计划这样做,还没有着手,想请教一下,这样做是否合理?各位平常对于这样的项目是怎么处理的?

602 次点击
所在节点    问与答
2 条回复
lixile
2022-06-15 19:54:03 +08:00
目录划分大体思路跟你说的一致
主要是抽象出硬件层 对外提供统一接口 也就是你说的 /device
一般可能还有 也许会封装通信层 因为 32 64 会有为了性能 可能部分通信数据有差异
所以我有见过额外抽象出通信层的
在嵌入式来说 还是有可能 /app 无法彻底区分嵌入式平台 需要额外编译宏控制
zhttp
2022-06-15 22:04:04 +08:00
@lixile 感谢回复,如您所说,app 确实没法完全一致,主要是原本应用依赖的一个第三方库,在新的平台上死活编译不了,只能找了替代品,另外串口之类的设备名也不一样,只能用编译宏来控制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/859821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX