感觉嵌入式开发的门槛不在语言而在环境上… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KirbySD
V2EX    嵌入式开发

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

  •  
  •   KirbySD 2023-02-27 11:54:32 +08:00 via iPhone 4565 次点击
    这是一个创建于 956 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    16 条回复    2023-02-28 16:57:31 +08:00
    acctv2
        1
    acctv2  
       2023-02-27 12:00:20 +08:00 via Android
    我给实验室做小工具就是 esp32+arduino ,用新的 arduinoIDE2.0 或者 platformio ,已经算是嵌入式上手简单的组合了。

    猛男们还在手撸 STM32+标准库+keil
    KirbySD
        2
    KirbySD  
    OP
       2023-02-27 12:17:44 +08:00 via iPhone
    @acctv2 ESP32 能火好像就是因为封装好了 Wifi+BT 而且还便宜吧…
    真要我手撸 WiFi 连接那我宁可付钱给成品设备制造商了(
    ryan4yin
        3
    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
        4
    ryan4yin  
       2023-02-27 12:25:13 +08:00
    感觉等用 c 入门后还是用 rust 整项目吧,c 这个生态实在是一言难尽...
    echo1937
        5
    echo1937  
       2023-02-27 12:27:48 +08:00   1
    感觉嵌入是典型的"这是攻击,这是重击,这是闪避“,好了你现在可以去调整大魔王了。
    litguy
        6
    litguy  
       2023-02-27 12:28:47 +08:00
    @ryan4yin 嵌入式的问题不在于 C/C++/RUST ,而是涉及的知识点很多,很杂
    Helsing
        7
    Helsing  
       2023-02-27 12:48:43 +08:00 via iPhone
    文档主要还是要看官方提供的 sheet ,pdf 那种,很详细,就看着头疼
    panlatent
        8
    panlatent  
       2023-02-27 12:51:27 +08:00
    这也是 C 的困难点吧,语言本身就那么多东西,跟具体系统、库、领域绑定的比较深,更需要掌握基础原理。
    zomco
        9
    zomco  
       2023-02-27 12:57:28 +08:00
    arduino-esp32 受害者的建议,玩 esp32 就用 esp-idf
    dacapoday
        10
    dacapoday  
       2023-02-27 13:14:18 +08:00
    现在的嵌入式已经很幸福了,还有 example code 和 标准库。
    当年学 msp430 ,都是先参考 datasheet ,把寄存器地址,中断地址 写成头文件,还要手动把 main 的地址 告诉编译器。要买额外的硬件 JTAG 调试器才能 debug 。
    duke807
        11
    duke807  
       2023-02-27 13:23:11 +08:00 via Android
    @KirbySD esp32 能火是因为找了老外做推广,而老外主流用 linux 平台开发,所以才火,海外先火起来,国内才能火。如果当初找国内团队走 keil 开发,就很可能火不起来,支持 wifi bt 的国产 mcu 其实有很多。

    另外要说的是,jtag 这种下断点和单步调试的手段太落后,终极调试手段是打印!
    yolee599
        12
    yolee599  
       2023-02-27 14:14:46 +08:00   3
    嵌入式开发来了。解答一下 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
        13
    promontory123  
       2023-02-27 14:57:14 +08:00
    嵌入式就是这样的,搭建环境就可以劝退一大波人了,单片机还好一点,带 Linux 系统的 SOC 更是大坑,所以在公司专门有人是负责做 BSP 开发的,负责把系统,底层接口都调试好了
    LXGMAX
        14
    LXGMAX  
       2023-02-27 18:04:06 +08:00
    #12 楼比较详尽了
    datasheet 的确不开放,这个东西如果有认识代理商就能要到,可以用拿样的名义去要手册
    而像 SOC 就得方案公司找原厂提供资料,比如 RK 、全志,深层一些的还要商务上申请才能拿到
    调试直接 printf 大法
    elmagnificogg
        15
    elmagnificogg  
       2023-02-27 18:28:23 +08:00
    esp 有专用的调试器,可以去淘宝买一个,功能比普通的要强大一些
    调试和代码环境一般建议直接用官方的,其他第三方的一般是用的人少,有问题找资料容易找不到。

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

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

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

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

    另外踩了好几个坑,一个是 lvgl 对于轻量级绘制需求开销太大了,滚回传统 GFX 库效率立马提升好几个数量级。一个是成品板子把 ESP32S3 的 USB 引脚复用成 GPIO 引脚了。还有一个是 ESP32 没有硬件 JPEG 解码电路…
    说实在的还是挺麻烦的(
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1175 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:36 PVG 01:36 LAX 10:36 JFK 13:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86