V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhttp
V2EX  ›  问与答

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

  •  
  •   zhttp · 2022-06-15 17:01:44 +08:00 · 665 次点击
    这是一个创建于 890 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 条回复    2022-06-15 22:04:04 +08:00
    lixile
        1
    lixile  
       2022-06-15 19:54:03 +08:00   ❤️ 1
    目录划分大体思路跟你说的一致
    主要是抽象出硬件层 对外提供统一接口 也就是你说的 /device
    一般可能还有 也许会封装通信层 因为 32 64 会有为了性能 可能部分通信数据有差异
    所以我有见过额外抽象出通信层的
    在嵌入式来说 还是有可能 /app 无法彻底区分嵌入式平台 需要额外编译宏控制
    zhttp
        2
    zhttp  
    OP
       2022-06-15 22:04:04 +08:00 via Android
    @lixile 感谢回复,如您所说,app 确实没法完全一致,主要是原本应用依赖的一个第三方库,在新的平台上死活编译不了,只能找了替代品,另外串口之类的设备名也不一样,只能用编译宏来控制。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5536 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:09 · PVG 11:09 · LAX 19:09 · JFK 22:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.