V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KirbySD
V2EX  ›  嵌入式开发

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

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

    非科班前端工程师大战 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 的数据结构(笑)

    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   ❤️ 2
    嵌入式开发来了。解答一下 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   ·   实用小工具   ·   5773 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 06:32 · PVG 14:32 · LAX 22:32 · JFK 01:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.