中秋结束还是得写篇夏季总结——嵌入式学习

发布于:2022-12-20 ⋅ 阅读:(184) ⋅ 点赞:(0)

1.实习

1.1 为什么选择实习

大学四年的时间里,我有三年的暑假都是在学校度过,哪怕有一年是因为疫情无法留校,也选择在学校周围租房考驾照以及捣鼓一些小玩意。总的来说,我已经习惯了一年回家一次,而这次不选择留校一方面是因为不想待学校了,另一方面也想去公司上上班赚点钱,积累点工作经验。

1.2怎么找到的实习公司

在考完研后,我觉得我的分数肯定上不了一志愿的学校。我个人其实厌倦了考试,不想再二战了。所以果断地在春招的时候投了简历,当然我没有选择来校招的公司,因为我去学校双选会,发现并没有什么嵌入式开发的岗位。而且学校本身没啥名气,来的大部分公司都很一般,所以我选择去51、91网站,投的也全是嵌入式软/硬件开发,最终也收获了几个offer。后来,因为分数上了国家线,所以可以尝试调剂回本校,虽然对于母校并无多少好感,但是坚决不想二战以及还怀有一点梦想的我还是不情愿的调剂回了本校。因为要读研,所以就拒绝了这几个offer,而其中一个公司的HR说我可以暑假去实习,我也确实有这个想法,又懒得再投简历找实习,所以也就接受了。

1.3实习公司以及我的工作

公司位置是在江苏南通,主要业务是做光伏储能。我工作的部门是大型储能,原本面试的是嵌入式软件开发,来了之后才发现不管是应届生还是实习生,可能是出于培养方案以及泄密的考虑,前几个月基本都得不到公司的代码。所以,我也就干了一些接线和调试设备之类的杂活。第一个月主要熟悉部门的主要产品和业务,第二个月各方面都比较熟悉之后就给师傅的一个项目打杂了,因为项目紧又缺人手,所以我也不得不和师傅一起周末加班。我的工作总的来说并不难,动手能力在学校实验室锻炼的还可以,所以上手也快。

2.书籍

2.1经济学

这三个月的前两个月还是看了一点书,之后因为工作繁忙基本就没看了。第一本是曼昆的经济学,分为宏观经济学微观经济学两册,虽然我是个工科的,但是我对于经济学还是有那么一点兴趣,所以去尝试看了一下。在阅读这本书的时候,确实会了解到经济学的很多概念。经济学主要研究的是如何管理资源的问题,在经济学里,人也是一种资源,叫人力资源。各类人及物的信息集合又可以产生很多经济学上的数据及变量,比如CPI、GDP、失业率、弹性指数、购买力、通货膨胀与紧缩等。由于看的比较随意且过去了较长时间,很多概念知识已经记不清了。这本书确实值得多次阅读,它的难度对我这种外行也比较友好,所以回校之后有空也得多读读(大概flag会倒)。
经济学

2.2控制理论

偶然看到一位B站关注的UP主(B站名为DR_CAN,真实名叫王天威)出了一本新书,叫**《控制之美》**。之前考研的时候看过他的视频,对于一些控制理论讲的非常简洁明了,所以我毫不犹豫地买了一本。买来拜读之后,发现书籍和他视频一样简洁明了,举的例子也让人印象深刻。比如,关于卷积的应用这一部分,他举的例子是混响,视频:https://www.bilibili.com/video/BV1vE411h7W2,混响就是录下某个环境下的短时且较响的音(比如用力拍一次手、戳破一个气球),之后把它和其它声音做卷积运算,就可以模拟出该环境下的发声效果。另一个有趣的例子是如何科学的控制体重。作者将人体体重变化看作输入是热量、输出是体重变化量的一阶系统,虽然只是个大概,但是我们的确可以列出该系统的传递函数。带入不同人的初始体重、作息等,可以得出不同人最终的体重范围。

控制之美

2.3C语言

C语言的书籍,我依旧推荐经典的**《C Primer Plus》**。在大三的时候看过一遍,考完研后忘得差不多了,而且之前只看了前面几个章节,后面的链接、内存管理、结构体、文件等类容都没有注重去看过,所以在划水和周末有空的时候看了一遍。其中有几个印象深刻的知识点,第一个是变量的链接属性,当全局变量使用static时,它具有内部链接,因此其它文件无法再使用extern引用它。在学习ESP32的官方例程时,我发现很多函数也都是使用static,给出的解释是防止多个文件函数名冲突。这也部分解释了为何ESP32官方不支持裸机开发,都必须基于FreeRTOS,如果一个函数想传递数据给另一个函数,不必定义全局变量,只需使用队列或者信号量,函数也不必有返回值。第二个是常量指针与指针常量,如下:

//常量指针
int rates[2] = {1,2}; 
const int *pd = rates;
*pd = 20;//非法
pd[2] = 23;//非法
//指针常量
int * const pc = rates;
pc = &rates[2];//非法
*pc = 20;//合法

之前一直没有分析过LVGL里函数作为参数传入函数是如何实现的,直到看了书上的函数指针,才知道原理。

lv_obj_set_event_cb(temp_btn,event_callback);//event_callback为void型函数
void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb);//lv_event_cb_t其实是函数指针,如下一行代码
typedef void (*lv_event_cb_t)(struct _lv_obj_t * obj, lv_event_t event);

2.4嵌入式C语言自我修养

这本书也是比较新的,21年出版的,配合**《C Primer Plus》**食用效果更佳。书中第一章的Vim和make教程恰好是我研究方向所需要的技能,我也百度了一些教程来学习Vim,熟悉了一段时间之后,发现也确实挺好用。甚至觉得用它编写代码有一点优雅,基本可以不用鼠标,跳转、编译执行、搜索替换都可以直接使用命令行。第二章的计算机体系结构简单的描述了从沙子到CPU的诞生过程,还是挺有意思的。第四章则讲述了程序的编译、链接、安装和运行的过程,阅读这部分对于理解make工作原理更加的清晰。第十章的操作系统入门配合使用ESP32编程食之更佳。

3.Diy

之前买了一块合宙的ESP32C3模块,合宙给的屏幕驱动代码是用lua写的,我没学过,所以用C并结合官方代码写了一份驱动。因为之前没用过乐鑫的开发环境,所以这个过程踩了很多坑,本身水平又菜,但奈何自己又菜又爱玩呢!我还试着加了AHT10温湿度传感器的驱动代码,以及ESP32C3的ADC功能,发现ESP32C3的ADC是真的不行… 也不知道是我这块板子硬件问题,还是ESP的ADC真的这么拉,连ST的8位单片机STM8的精度都达不到,以下是测试的数据平均值:

type 电压1V 电压2V 电压1.5V
idf版 0.9032 1.8160 1.367
arduino版 0.9013 1.8230 1.3647
STM8S版 1.0054 2.010 1.521

以下是部分踩坑记录:

log1
log2
显示照片(未接AHT10)
在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到