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

2021-02-06 15:46:15 +08:00
 jsxiaobai

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

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

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

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

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

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

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

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

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

现有 API 不健全及完善

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

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

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

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

模块化系统不完善

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

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

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

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

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

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

树莓派 Pico 的几个推测

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

3386 次点击
所在节点    Raspberry Pi
17 条回复
felixcode
2021-02-06 16:39:03 +08:00
写一个 hello world 编译进内核,算不算改造了三千万行代码?
cs8425
2021-02-06 16:48:32 +08:00
标题党了啊
微控器不上 OS 很正常
很多都裸跑
一个 while+中断搞定一切的一堆...
12101111
2021-02-06 16:53:31 +08:00
为什么不用 embedded-hal
https://github.com/rp-rs/rp-hal
提供了跨越 ISA 和 BSP 的兼容性
muzuiget
2021-02-06 17:56:35 +08:00
标题党
loading
2021-02-06 19:04:56 +08:00
OS ?
这玩意就是个基础的单片机啊!!!
chinvo
2021-02-06 19:11:02 +08:00
单片机要个啥 OS
yeqizhang
2021-02-06 19:20:09 +08:00
要 os 买 zero 去呀
pakro888
2021-02-06 19:22:00 +08:00
这是拿嵌入式设备的思路带入了单片机
muooOOO
2021-02-06 20:38:47 +08:00
单片机要啥自行车,不想跑裸机那就等官方适配 Arduino,或者等 rtt
lili1397
2021-02-06 20:41:05 +08:00
蹭热度,严重误导人。人家 1 月 21 日才出来的版子,
你这头都 20 万行代码。
MCU 那么多,建议你把 20 万行代码移植到 STM32,arduino 。移到 51 也行呀。😄

抹黑一个新生事物,就像用一块黑布去遮挡大家的双眼,无视别人的进步和优越,这跟井底之蛙有啥区别。
cmostuor
2021-02-06 20:56:28 +08:00
单片机的 OS 要自己移适配不想适配就等别人适配完了再玩, 单片机没有 OS 也可以跑 PC 也是一样但毕竟单片机只是为了特定任务而设计的。
jsxiaobai
2021-02-07 08:51:28 +08:00
@felixcode 回复诸位,那个代码统计是我自己的代码,不是 pico-sdk 里面的代码...
jsxiaobai
2021-02-07 09:01:06 +08:00
@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
2021-02-07 09:01:35 +08:00
@12101111 感谢 感谢 还没试过这个 去试试这个。
felixcode
2021-02-07 09:50:39 +08:00
@jsxiaobai
头文件和 C 文件都是你自己写的吗?
没有用到其他人写的库?
因为有你的代码在里面所以这 20 万行都是你“自己的代码”?
jsxiaobai
2021-02-07 14:36:49 +08:00
@felixcode 这个统计里面的都是我模块独立的代码,是单独目录存放的,引用的其他的代码在 pico-sdk 里面
gainsurier
2022-07-04 22:28:01 +08:00
pico w 出来了哈哈哈

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

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

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

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

© 2021 V2EX