对话CherryUSB开源作者

大家好,很荣幸有机会和CherryUSB的作者进行了一次沟通,我把我的沟通内容整理了下,分享给大家,希望对深耕技术的同学们有所指引与帮助。

┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅

你能给我们做下简单的自我介绍吗?

大家好,我是吕家振,目前是一名嵌入式 AE 工程师,工作快6年了,目前主要负责一些应用方案开发。之前的话是负责 SDK 驱动开发,算是从驱动转 AE 了。

请问你是什么时候有想法做CherryUSB这个开源项目的?

21年10月份左右开始,最开始没考虑做开源,取名也是很随意。然后从 2022年1月底春节开始,正式有cherryusb这个名字。取名方面采用了樱桃这个英文,樱桃代表小并且甜,对应cherryusb 代码的小而美并且易于阅读和使用。

你的技术学习生涯中是什么时候开始接触到USB技术,您的第一个基于USB的作品是什么呢?

一开始是在做 stm32cubemx 教程(b站有)的时候接触 usb,大概2021年1月多,当时谈 usb 比较多的是调试器。后面在公司里,负责驱动开发,其中包含了 usb,也是这个时候开始真正进入 usb 的学习,之前只是用别人现成的代码。第一个作品的话,自然就是 usb 调试器,以及 usb转串口。

┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅

我这些年也在看USB技术的内容,我觉得USB的东西都非常朦胧非常难懂,请教一下您是如何把这些知识贯穿在一起并应用如此好的呢?

在最开始的时候,是不推荐看 USB 概念的,因为过了一会就会忘记,所以最开始就是使用现成的 USB 工程,将他跑起来,跑起来以后,在对例程中的一些名词,最开始就是描述符和端点,然后通过usb官方手册去了解下这两个。

了解完这两个以后,我们可以再去看看 USB 中断,为什么要看 USB 中断?因为市面上有那么多 USBIP,那他们之间有没有相似点呢?最后我们会发现,所有 USBIP 他其实都是一个原理,无论寄存器怎么排布,中断分类基本是有共同点的,最后我们找到了这个共同点,就是端点完成中断(他名字可能叫 setup ep0,in,out)。

到这里,我们还没有去学 USB 其他概念。根据端点类型,我们可以得到 USB 四大传输,根据中断,我们可以得到三大事务,到这里我们了解了传输和事务,至于事务组成,完全不用了解,因为代码中体现不到,事务的组成是由硬件完成,我们只需要有填充数据的接口就行。根据上面,总结就是先用,再看例程,然后找 USB 中断,总结规律,至于什么是枚举,枚举过程,驱动如何加载,一开始完全不用了解,只需要知道,我要发数据,我要收数据,至于枚举,其实就是收数据然后解析而已。

最后,就是类比,usb 的概念很多,那我们可以进行以下转换,比如端点完成中断,他像什么,dma 完成中断,我们可以从寄存器排布看出可能有个数组,比如EP_CTRL[16];或者 EP1_CTRL,EP2_CTRL 等等,那么再结合完成中断,其实就是等价于 dma 完成中断,每个ep代表一个dma 通道,那把dma 绑定到一个外设,我们可以用最简单的 uart来绑定,也就类比成了 uart+dma模型,然后至于事务的组成,类比成 uart 的起始位+数据位+奇偶+停止位即可。

通过找规律+类比的方式,我们就可以将复杂 USB 简单化,最终可以得出, USB 很简单。难只是因为别人把USB 协议栈写复杂了,导致看不懂了罢了。

请问您是如何兼顾您的开源项目和工作的呢?

主要是在下班以后和周末搞开源项目。然后做开源项目的话是有 roadmap的,会提前列好下个版本大概什么计划,释放什么内容。期间,如果有开源爱好者或者工作上使用有问题或者需求相关,会集中记录,并在后面进行更新。

如果作为一个技术面试官,你会特别看中面试者的哪些方面?

第一个就是解决问题的方式。包括如何提问,如何查找,借助什么工具,调试手段等等。

第二个就是开源项目上的一些表现,如果一个面试者在开源项目上很活跃,通常来说,他的 coding 水平以及与人交流和协作能力会更高一点。

开发者想向CherryUSB提交补丁的话,有没有简单的上手文档呢?(比如有链接直接填写链接)

可以参考 如何在 Github 上规范的提交 PR(图文详解) - 知乎

https://zhuanlan.zhihu.com/p/584834288

Linus在邮件中炮轰那些不专业的开发者,对于CherryUSB而言,你最不能容忍的是怎样的代码提交呢?

第一个就是代码格式,代码格式代表了一个代码的美观程度,相当于人的脸面。

第二个是变量和函数命名,如果取名很随便,不能代表他的含义和作用。

第三个就是嵌套宏,如果存在很多嵌套宏,不利于调试和查阅代码,尤其是 ## 这种连接符,尽量不用

第四个就是内存和效率相关,随意使用 memcpy这种,随意使用很大的局部变量。

在面对新的技术方向的时候,您是怎么快速入门并专精的

专精可能谈不上哈哈,一开始的话,主要是使用例程,然后查看 API ,如果有文档就看下文档,大概了解这个 API 的作用,如果遇到一些专业名词,在去找对应的官方手册阅读。最后就是梳理整个函数的调用过程。当然,期间也是需要请教这个技术方向的大佬,会少走不少坑。

想问下大佬的职业规划是怎么样的?我相信非常多的技术新人对技术大佬的职业规划特别关心,因为您现在就是他们的榜样。

暂时还没有想到很远的规划,当前的话,主要是跟上目前嵌入式领域的热点话题,比如 AIOT,risc-v,工业控制。个人是非常喜欢开源项目的,因此,会去深入学习并加入到一些开源项目中。现在大环境不太好,还是需要多学习一些有用的技术。个人的话,推荐去深入了解像 zephyr, rtthread,音视频,wifi,ble,网络,USB, CAN相关的技术。

对于刚入职场的技术开发同学,你会给他们什么建议呢?

多去看看一些开源项目,尤其是比较火热的开源生态,比如乐鑫,rtthread,zephyr,立创的一些硬件开源项目等等,里面有很多优质的代码,上手这些代码,可以帮助我们积累一些技术。对于 linux方面的话,我不太了解,可以通过一些 linux 公众号,看看大佬们每天都在发什么特别的 linux 相关的名词。

其次就是沉下心,多自己思考,不要一有问题就问别人,需要有自己的思考和解决问题的过程。

https://cherryusb.readthedocs.io/zh-cn/latest/quick_start/start.html

┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值