V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhttp
V2EX  ›  问与答

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

  •  
  •   zhttp · Jun 15, 2022 · 992 views
    This topic created in 1426 days ago, the information mentioned may be changed or developed.

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

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