工作一年总结及展望

从毕业到现在差不多工作一年了,今天想做一个总结。

我在大学学的是物联网工程专业,所以我之前的博客有一些硬件相关的内容。我在大学就开始在有道云做各种方面的笔记了。因为如果不记下来的话,别说过一个月了,过半个月我基本上就全都忘了。后来是毕设老师说,可以写一点博客提高知名度,毕竟面试真的看不出什么东西,于是我就开始有了写博客的习惯。

公司的产品主要是做一些卫星数据的处理、存储和传输,所以我现在的工作会涉及到很多不同的接口:以太网、USB、CAN、MIPI DSI、MIPI CSI、FlexSPI、I2C、UART…基本上包含了所有的外设接口,我觉得也是一个好事,因为很多产品也不会用到这么多接口,那在这个公司我能学到所有不同的接口,而且这些都很常见和常用。

由于项目进度需要,很多东西其实无法深入研究,基本上就是移植SDK,然后试一下参数,实在不行也是找技术支持解决。这样的嵌入式工程师很多,但我不希望我是这样的,嵌入式这个行业门槛本来就很低(实际上,所谓的软硬结合中的硬件根本不需要懂多少硬件),如果你还不去深入地了解这些知识,我觉得你不会有任何竞争力。

受到大学毕设导师的影响,我养成了一些好习惯,比如代码的严谨,LVGL学习(3):页面切换原理和页面管理实现就是一个例子,在RTOS下需要考虑更多的东西。还有深入了解SDK等官方代码中的每一行代码,比如在我的毕设 伺服电机的FOC控制中,这一系列的几篇文章的质量我个人觉得还是很高的,我也花了不少功夫在里面:

  • FOC SVPWM函数PWMC_SetPhaseVoltage解析
  • FOC 单电阻采样 位置环控制伺服电机
  • PMSM FOC位置环S曲线控制算法(恒定急动度)
  • CORDIC算法 arctan反正切计算原理及C语言定点实现
  • C语言正余弦函数定点查表算法原理及实现

这里面涉及很多算法,我刚开始也是一知半解,也花了很长时间去理解里面的原理。这对我的影响就是,工作后需要写BootLoader,如果我不严谨的话,我不会知道一个BootLoader在进入和退出前要完成的一系列考虑,比如你开了一个中断,在退出前一定要退出。网上很多关于BootLoader的文章其实都没有提到这些,所以很多不严谨的人写的BootLoader也会留下很多隐患。和FOC代码一样,为了兼容不同产品的官方SDK的代码和不同特性,一般是把所有功能都考虑了。由于我深入理解了每一行代码,我把我用到的功能一步一步自己写了一遍,最后代码更加清晰,代码量和工程文件都是大大减少。

另外,我觉得对于ARM内核级别的知识来说,是非常有必要学习的,这能帮助你优化整个系统的架构,也能让你更快地定位出BUG。比如,对于MPU来说,我之前从来都想不到,将SDRAM设置为non-shareable会导致LVGL的CPU达到99%,而设置为shareable后则只有8~10%(未打开编译器优化)。如果我只是完成项目的话,这个差异其实是我试出来的,我其实可以不管了。但如果你要考虑一个系统代码执行的效率的话,是非常有必要深入了解的,所以我写了两篇博客介绍MPU和Cache:

  • ARM基础(3):MPU内存保护单元详解及例子
  • ARM基础(4):L1 Cache之I-Cache和D-cache详解

对于FreeRTOS来说,也是在ARM不同内核的基础上实现的一些上下文的切换,所以我先学习了ARM的一些特权模式,然后写了几篇博客深入分析上下文切换的原理:

  • ARM异常处理(1):异常类型、优先级分组和异常向量表
  • ARM异常处理(2):中断的输入和挂起的6种情况分析
  • ARM异常处理(3):Bus faults、Memory management faults、Usage faults、Hard faults详解
  • ARM异常处理(4):SVC和PendSV的作用详解
  • ARM基础(1):Cortex-M3的核心寄存器和特殊寄存器
  • ARM基础(2):模式和特权等级(User/Thread mode和Privileged level)
  • 基于Cortex-M的RTOS上下文切换详解及FreeRTOS实例
    • 这篇文章由于花了很大的功夫对Cortex内核和FreeRTOS进行总结,个人认为讲得很全面,所以设置成了VIP可见了
  • FreeRTOS第一个任务的创建和调度详解(SVC异常)
  • FreeRTOS开启任务调度函数xPortStartScheduler详解

另外,最近在解决HyperRAM配置、NOR Flash配置、Flash下载算法上又遇到一些问题,但我真的想知道这里面的原理是什么,所以我又写了四篇关于FlexSPI的文章详细分析它的特性。

  • I.MX RT1170之FlexSPI(1):FlexSPI功能框图和特性
  • I.MX RT1170之FlexSPI(2):LUT表格的组成和FlexSPI结构体配置
  • I.MX RT1170之FlexSPI(3):NOR Flash手册分析和参数配置详解
  • I.MX RT1170之FlexSPI(4):HyperRAM手册分析和参数配置详解

此外,这一年我还写了一些LVGL、LwIP、eDMA的一些源码分析、RT1176 OTFAD加密的一些文章、还有时序图、CRC等等等等的文章。对了,还有蓝牙的四篇文章,因为我刚入职的工作就是写蓝牙的程序,需要理解蓝牙的协议栈,说实话,蓝牙的这几篇文章带给我的粉丝是最多的(想申请博客专家,所以部分文章设置为粉丝可见了)。所以我也在考虑,后续要不要再深入写一些蓝牙的文章。

我有一个todo list,里面都是未来打算学习和写的博客:AES加解密原理和代码分析、MIPI接口原理、CAN原理、USB CDC/MSC/HID基本知识、Fatfs源码分析、md5原理及源码分析…但最近开始工作比较忙了,然后偶尔还需要锻炼一下打打球,而且我自己还有一些别的东西要学,比如理财,比如英语。实际上我英语不差的,看手册完全没问题,但我想能够达到能够听得懂全英文课程的水平。所以最近开始更新博客比较少,但我也会坚持每周一篇文章以上的更新,慢慢积累吧。

说实话,这一年我的个人的收获是非常大的,很多知识在我还没接触的时候觉得非常难,但当你真正的花几天深入地了解之后,发现知识总是能学会的,问题总是能够解决的。嵌入式这个行业就是这样,要学的东西很多,如果你不去深入地了解的话,你的水平就永远停留在那里。而当你慢慢地积累平时遇到不同的问题,深入地了解所有的你不确定的代码,不确定的知识之后,你就会慢慢成为专家。

从我小学开始,我的偶像就一直是科比,他有一件衣服上面写的是:“Score til u black out”,所以我的ID是tilblackout,我希望我也能一直坚持做一件事。

你可能感兴趣的:(创业创新)