V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jsxiaobai
V2EX  ›  Raspberry Pi

移植了 20 万行代码才发现树莓派 Pico 双核 MCU 竟是三无产品?是真香还是真不香?

  •  
  •   jsxiaobai · 295 天前 · 2282 次点击
    这是一个创建于 295 天前的主题,其中的信息可能已经有所发展或是发生改变。

    移植了 20 万行代码才发现树莓派 Pico 双核 MCU 竟是三无产品?是真香还是真不香?

    树莓派 Pico 双核 MCU 来了,要跟吗?参考下其他人移植代码后的经验

    树莓派 Pico 系统不完善

    树莓派 Pico 双核 MCU 发布有一段时间了,在尝试将 20 万行代码移植到 Pico 系统后发现,这个系统有不少大坑,还未入手的小伙伴考虑好后再入.将过程中遇到的各种坑汇总,以飨读者.

    树莓派 Pico 移植 20 万行代码

    移植到树莓派 Pico 系统的几大问题

    无 OS,没有 thread,也没有 event,纯粹单线程阻塞

    常见的的模块在嵌入式系统里面为适配不同的 OS 和系统往往设计一个 OSAL 适配层,这个层一方面向业务功能模块提供标准 API,另一方面针对不同的 OS 或者系统实现对应的 API.

    树莓派 Pico 移植 OSAL

    Pico 系统目前是没有使用常见 OS 的,也就是它本身是一个独立的 OS,模块移植需要针对其单独写一个适配层,会显著增加模块的移植工作量.

    同样的,因为其没有使用常见 OS,那么现有的其他模块,也无法直接简单使用,都需要针对性的移植,这大大增加了整体的工作量.

    另外系统里面没有 thread,也没有 event,纯粹是一个单线程的概念,这个对于通信类应用会是个灾难.

    现有 API 不健全及完善

    模块中常常使用系统提供的基础功能来支持业务的实现,如各类外围接口操作、定时器、队列等等. Pico 现有的 API 函数实现都是骨头级别的,并没有针对常见使用的 API 做完整对标实现. 移植功能模块时需自行多一层包装和调试.

    以 timer 这个常见功能为例,常见的使用逻辑如下:

    • 创建 timer 实体,此时 timer 本身是没有开始工作的
    • 在需要开启 timer 时,打开 timer
    • 在需要关闭 timer 时,关闭 timer
    • 功能完成后删除 timer

    Pico 系统 API 里面提供的只有 repeating timer 这个,而这个是创建就是开始,而且并没有对应的成对的开启 /关闭 timer 的 API,在使用时,还需要自行验证封装.

    PICO API timer

    PICO 重复定时器

    在系统 API 里面,其他的部分也或多或少有类似的情况. 这一套本应该是 OS 或者类似 OS 的 API 接口,被 Pico 比较特立独行的封装,其稳定及健壮性有待考验.

    模块化系统不完善

    开源系统往往可以很方便地集成各类模块实现最终的功能,Pico 整个系统是完全的 CMake 风格,通过包含其核心 SDK 的 CMake 系统即可实现对应的编译 CMake.

    但是,各类当前的已有的模块在它目前的代码结构里面是没有,需要自行移植. 另外,针对模块之间的依赖、相互限制、引用、宏依赖等等 都没有做特别处理,

    这些都需要在移植时自行研究摸索.

    如果一个功能模块需要依赖比较多的其他模块,那么这个过程会比较痛苦和耗费工作量

    树莓派 Pico 当前系统的几大挑战

    针对 Pico 系统目前的现状,将产品或者功能模块移植到此系统上时,会面临较大挑战,建议先进行评估再开展:

    • 无 OS,移植工作量大

    • 新增 OS 后,前序移植工作量浪费

    • API 尚不健全,稳定健壮性有待考验,接口变化的可能性比较大

    树莓派 Pico 的几个推测

    树莓派 Pico 目前还刚刚开始,针对接下来可能的发展做几个小的预测:

    • WiFi 版 Pico W, 可能性 > 99.99999%. 没有 WiFi 的 MCU 不是好 IoT 系统.
    • Arduino > 80%概率能跑,官方估计会半支持
    • 80%概率 RPI 要在 FreeRTOS+LWIP 等组合基础上出自己的'OS'
    16 条回复    2021-02-07 14:36:49 +08:00
    felixcode
        1
    felixcode   295 天前
    写一个 hello world 编译进内核,算不算改造了三千万行代码?
    cs8425
        2
    cs8425   295 天前 via Android
    标题党了啊
    微控器不上 OS 很正常
    很多都裸跑
    一个 while+中断搞定一切的一堆...
    12101111
        3
    12101111   295 天前
    为什么不用 embedded-hal
    https://github.com/rp-rs/rp-hal
    提供了跨越 ISA 和 BSP 的兼容性
    muzuiget
        4
    muzuiget   295 天前
    标题党
    loading
        5
    loading   295 天前 via Android
    OS ?
    这玩意就是个基础的单片机啊!!!
    chinvo
        6
    chinvo   295 天前 via iPhone
    单片机要个啥 OS
    yeqizhang
        7
    yeqizhang   295 天前 via Android
    要 os 买 zero 去呀
    pakro888
        8
    pakro888   295 天前 via Android   ❤️ 1
    这是拿嵌入式设备的思路带入了单片机
    muooOOO
        9
    muooOOO   294 天前 via Android
    单片机要啥自行车,不想跑裸机那就等官方适配 Arduino,或者等 rtt
    lili1397
        10
    lili1397   294 天前 via iPhone
    蹭热度,严重误导人。人家 1 月 21 日才出来的版子,
    你这头都 20 万行代码。
    MCU 那么多,建议你把 20 万行代码移植到 STM32,arduino 。移到 51 也行呀。😄

    抹黑一个新生事物,就像用一块黑布去遮挡大家的双眼,无视别人的进步和优越,这跟井底之蛙有啥区别。
    cmostuor
        11
    cmostuor   294 天前
    单片机的 OS 要自己移适配不想适配就等别人适配完了再玩, 单片机没有 OS 也可以跑 PC 也是一样但毕竟单片机只是为了特定任务而设计的。
    jsxiaobai
        12
    jsxiaobai   294 天前
    @felixcode 回复诸位,那个代码统计是我自己的代码,不是 pico-sdk 里面的代码...
    jsxiaobai
        13
    jsxiaobai   294 天前
    @all 是标题党,不过总结的也都是实际情况。对于讨论到的几个点
    1. MCU 不需要 OS 或者拿一个 Arduino 、FreeRTOS 上去就能用
    是的。 往往早期 MCU 不需要 OS,他这个 200 多 K RAM,能配 16M 的存储,不是个没有 OS 的配置。 只是他目前还没做完,还不完善。
    移植 Arduino/FreeRTOS 也是完全赞同,极大概率会有。 目前是没有的,如果想跑自己的业务又对此类系统有依赖,那是有依赖移植工作量的.
    2. Pico 不是单片机
    当然这里都是些‘字眼’。 一般单片机用汇编或者简单的 C 语言,内存是 10K 甚至更少数量级的,存储也是非常少。 而 Pico 的 200 多 K RAM,配几 M-》十几 M 的存储,这个是个典型的‘MCU’,而且是中高端一点的 MCU.
    配备 OS 是可预期的,配备常见的功能部件也是可预期的。
    3. 黒、抹黑等
    文章是对当前移植功能遇到问题的总结,更多的是反映这个 Pico 体系的当前现状以及这个现状对考虑这个系统人的提醒。 谈不上黒或者不黑.
    jsxiaobai
        14
    jsxiaobai   294 天前
    @12101111 感谢 感谢 还没试过这个 去试试这个。
    felixcode
        15
    felixcode   294 天前
    @jsxiaobai
    头文件和 C 文件都是你自己写的吗?
    没有用到其他人写的库?
    因为有你的代码在里面所以这 20 万行都是你“自己的代码”?
    jsxiaobai
        16
    jsxiaobai   294 天前
    @felixcode 这个统计里面的都是我模块独立的代码,是单独目录存放的,引用的其他的代码在 pico-sdk 里面
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2310 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:51 · PVG 19:51 · LAX 03:51 · JFK 06:51
    ♥ Do have faith in what you're doing.