感觉嵌入式开发的门槛不在语言而在环境上…

2023-02-27 11:54:32 +08:00
 KirbySD

非科班前端工程师大战 ESP32 Arduino  

不知道是不是因为过于底层…以前随便用的 Array.splice 在 c 上都要自己实现有点难受,当然这不是重点

屏幕( ILI94 什么来着)和触摸( GT911 )想找个文档难如登天,document 根本搜不出来,example 基本都不会给你解释为什么
LVGL 的文档也只会给你一堆 example 让你自己感受,我现在还没搞懂 imgbtn 的左中右 imgsrc 都是什么东西
相比之下乐鑫的文档还算比较翔实了…

Debug 感觉也不明不白,ESP32 debugger 只能搜出乐鑫的 ESP-IDF 调试环境,Arduino 就只能看别人的 tutorial 了。现在烧录前编译没检查出来的错误就只能直接板子崩溃(也看不到哪行代码造成的崩溃),再根据内核报错猜是哪里出了问题
性能优化就更玄学了,CPU 占用率就是上不去但 lvgl 的 fps 也不高。memcpy 开销应该也不大吧…搜到的结论说 struct 也不怎么吃性能。搜了半天怀疑是 TCP 拥塞控制算法的问题,准备禁用掉再战  

周末虽然姑且把主要逻辑做完了,但真的好怀念 Web 开发所见即所得热重载周边生态完备轻松调试的开发环境
之前有楼主说人都往 Web 开发挤没人写嵌入式感觉就这开发环境活该没人(划掉)市场还是会用脚投票的

最后感谢一下 USBIP 这个项目,没这玩意我估计还得去学画 PCB 板(不)不过这玩意就是真的搜 document 都搜不出来的东西了,顺带让我学习了下 USBHID 通信和 c 的数据结构(笑)

3780 次点击
所在节点   嵌入式开发
16 条回复
acctv2
2023-02-27 12:00:20 +08:00
我给实验室做小工具就是 esp32+arduino ,用新的 arduinoIDE2.0 或者 platformio ,已经算是嵌入式上手简单的组合了。

猛男们还在手撸 STM32+标准库+keil
KirbySD
2023-02-27 12:17:44 +08:00
@acctv2 ESP32 能火好像就是因为封装好了 Wifi+BT 而且还便宜吧…
真要我手撸 WiFi 连接那我宁可付钱给成品设备制造商了(
ryan4yin
2023-02-27 12:22:39 +08:00
我 esp32 stm32 都有在折腾,上周也刚搞了块 ILI9341 的屏幕,确实很麻烦。

资料倒不是说没有,但是生态跟互联网是没法比的,一个 ILI 显示的 C 库,可不是直接 npm install 就能用的。

首先我用的是 platformio + stm32cubeide ,这俩玩意儿的项目结构就不一样,折腾了好久才把它俩结合起来用。

然后又被库坑了,查到的库也是 stm32cubeide 的结构,又一番折腾改造成 platformio 结构。

改完后编译又过不了,一番折腾发现库里面有很多屏幕 IC 、传输方式的实现,要把 ILI9341 之外的所有实现、以及 SPI 协议之外的其他代码全部删除,才不会有冲突...

然后又发现 demo 里有几行代码在 GNU_C 下 无法通过编译,要注释掉.

这都搞完后,才终于能好好编译代码,最后接线又查了好多资料,才搞明白 SPI 要怎么接线。

线接好屏幕不亮,为了调试又折腾了一番怎么将 printf 日志通过 UART 打印出来,一开始抄的别人代码,结果发现它只支持 keli...又是找了好久才找到 GNU_C / keli 通用的 printf => UART 的定义代码。

下班搞了两个晚上才终于把 demo 跑起来,看到效果。

跑是跑起来了,但是刷新时发现 X/Y 轴的定义好像有点反了,查了一波库代码也没找到关键点...累觉不爱
ryan4yin
2023-02-27 12:25:13 +08:00
感觉等用 c 入门后还是用 rust 整项目吧,c 这个生态实在是一言难尽...
echo1937
2023-02-27 12:27:48 +08:00
感觉嵌入是典型的"这是攻击,这是重击,这是闪避“,好了你现在可以去调整大魔王了。
litguy
2023-02-27 12:28:47 +08:00
@ryan4yin 嵌入式的问题不在于 C/C++/RUST ,而是涉及的知识点很多,很杂
Helsing
2023-02-27 12:48:43 +08:00
文档主要还是要看官方提供的 sheet ,pdf 那种,很详细,就看着头疼
panlatent
2023-02-27 12:51:27 +08:00
这也是 C 的困难点吧,语言本身就那么多东西,跟具体系统、库、领域绑定的比较深,更需要掌握基础原理。
zomco
2023-02-27 12:57:28 +08:00
arduino-esp32 受害者的建议,玩 esp32 就用 esp-idf
dacapoday
2023-02-27 13:14:18 +08:00
现在的嵌入式已经很幸福了,还有 example code 和 标准库。
当年学 msp430 ,都是先参考 datasheet ,把寄存器地址,中断地址 写成头文件,还要手动把 main 的地址 告诉编译器。要买额外的硬件 JTAG 调试器才能 debug 。
duke807
2023-02-27 13:23:11 +08:00
@KirbySD esp32 能火是因为找了老外做推广,而老外主流用 linux 平台开发,所以才火,海外先火起来,国内才能火。如果当初找国内团队走 keil 开发,就很可能火不起来,支持 wifi bt 的国产 mcu 其实有很多。

另外要说的是,jtag 这种下断点和单步调试的手段太落后,终极调试手段是打印!
yolee599
2023-02-27 14:14:46 +08:00
嵌入式开发来了。解答一下 OP 的问题:
1. C 语言数组操作使用 memset ,memcpy 等,头文件为 string.h ,要什么功能都可以自己实现。
2. 元件的数据手册有的是厂家故意不开放在网上下载的,有的连官网都没有。特别是屏的,触摸的,摄像头的,这种驱动一般都是找供应商提供,网上搜到的一般都是泄露出来的。还有初始化的那一堆 16 进制,有的参数你不用去详细理解它,是厂家用软件自动生成的要写到寄存器的数据。
2.1. 屏幕驱动芯片型号应该是 ILI9341 ? google 上搜 “ili9341 datasheet pdf”,第一个结果就是: https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf
2.2. 同样的,google 上搜 “gt911 datasheet pdf”,第一个结果就是: https://www.distec.de/fileadmin/pdf/produkte/Touchcontroller/DDGroup/GT911_Datasheet.pdf
3. lvgl 可以使用电脑模拟器的,什么效果都可以自己调试好了再移植到板子上。
4. 嵌入式的打断点 debug 需要把专用调试器(不便宜)接一个专门的调试接口( jtag )才能调试,不同的内核架构调试器不一样。比如 ARM 的内核和 RISC-V 内核的调试器不一样的。ESP32 一般不会使用这种方式 debug ,而是使用 print 日志,配合注释大法来逐步定位问题点。

对想学嵌入式开发的人的几点建议:
1. 不要浮躁,静下心来,多找资料,了解原理。学一下原理图,看 datasheet ,对写代码有帮助。嵌入式不能一蹴而就,需要的是长时间的积累。
2. 使用 Arduino 注定不能接触到很底层的东西,出了问题就很捉急,一般都是用原厂的环境做开发。
3. 合理利用各种工具,比如串口助手,网络助手,USB 抓包工具,逻辑分析仪,示波器,万用表……对调试分析很有帮助。
4. 开源库很多都不适合嵌入式的场景(芯片 ROM 和 RAM 都少,频率也低),没找到合适的也是正常,开始造轮子吧。
promontory123
2023-02-27 14:57:14 +08:00
嵌入式就是这样的,搭建环境就可以劝退一大波人了,单片机还好一点,带 Linux 系统的 SOC 更是大坑,所以在公司专门有人是负责做 BSP 开发的,负责把系统,底层接口都调试好了
LXGMAX
2023-02-27 18:04:06 +08:00
#12 楼比较详尽了
datasheet 的确不开放,这个东西如果有认识代理商就能要到,可以用拿样的名义去要手册
而像 SOC 就得方案公司找原厂提供资料,比如 RK 、全志,深层一些的还要商务上申请才能拿到
调试直接 printf 大法
elmagnificogg
2023-02-27 18:28:23 +08:00
esp 有专用的调试器,可以去淘宝买一个,功能比普通的要强大一些
调试和代码环境一般建议直接用官方的,其他第三方的一般是用的人少,有问题找资料容易找不到。

现在其实大部分敢给一套完善环境的都是基于他们特定的板子,如果板子差异非常大,那就得要你各种都会,否则你根本玩不起来。

一般来说如果全套都使用官方的,其实是难度最小的,啥都是现成的,你只要关注你的 app 部分就行了

反而是东拼西凑,经验又不够,就会觉得哪哪都是反人类
KirbySD
2023-02-28 16:57:31 +08:00
感谢各位,其实主楼中基本已经没有太大问题了,只是吐槽一下嵌入式的门槛
毕竟 Web 开发能吸引大量开发者就是因为门槛低出活快…要是像以前那样起个环境都要配置一天还看不到 HelloWorld ,那还是挺打击新手的积极性的…

基础知识固然很重要,但对于希望从应用层入门的新手来说,实在是没有必要让他必须去了解从画板到焊接之类的电子工程知识。如果新手后面有意了解底层知识,自然会去寻找相关资料的
否则 Micropython 之类的也不会有市场了吧,大家都用 c 了(🐶

另外踩了好几个坑,一个是 lvgl 对于轻量级绘制需求开销太大了,滚回传统 GFX 库效率立马提升好几个数量级。一个是成品板子把 ESP32S3 的 USB 引脚复用成 GPIO 引脚了。还有一个是 ESP32 没有硬件 JPEG 解码电路…
说实在的还是挺麻烦的(

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

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

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

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

© 2021 V2EX