嵌入式Linux——学习经历

2023-05-16

简介:

        本文主要介绍我学习嵌入式的经历。并结合自身的经验希望可以对大家有所帮助。

视频及教材:

        郭天祥相关视频及教材,天狼星相关视频及教材,野火迷你相关视频及教材以及韦东山100ask官网所介绍的视频及教材

个人简介:

        我的本科学校是一个很普通的二本,研究生也是二本。我找的是一个规模中等的公司(我个人对这份工作还是比较满意的)。而我所面试的公司也是做嵌入式Linux相关的产品。好了我的基本情况就介绍到这里了。而详细的情况我会在下面说明。

我的大学——忙碌而充实:

        因为我所做的与单片机相关的项目都在大学时,而在研究生期间我主要研究的是量子相关的课题,所以这里我重点介绍我的大学。

        我的大学是一个很普通的二本。有时候大家可以会觉得他是一个专科,因为他是以学院命名的。而对于刚进大学的我嵌入式是一个我从来没有接触过的概念,更没有想到我的后半生都会与嵌入式相关。那时的我并没有明确的目标,只是想着要好好学习老师课上所讲的内容,而那时也是我最天真的时候。那时我所做的很多事都是因为其他人也在做,而没有真正去了解我真正想要的是什么,更没有认真的想过我的大学应该怎么过。

        这样的日子维持了一年,在这一年中我虽然也很忙碌但是回想自己走过的路,却发现并没有留下任何的痕迹。而真正出现转机是在我大二国庆节期间,那时候的我无所事事,但好的一点是我有几个要好的朋友。我们在一起聊天的时候他们聊到了自己所焊接的电路板,自己所搭建的电路,以及自己所设计的功能模块。这些都是我以前所没有接触过的。那一时刻,我突然意识到虽然我完全听不懂他们在说什么,但是感觉可以自己设计电路来实现某种特殊的功能对我来说似乎很有吸引力。所以那时候我决定要加入这个组织——第二课堂。

        不得不说第二课堂开启了我对这个世界新的认识,同时也感谢第二课堂为我提供了那么好的平台来学习各种嵌入式相关的知识。现在想想在第二课堂的两年我都觉得收获满满。我刚进第二课堂时还没有学习单片机,而是利用各种电子元器件和简单的芯片来实现一些简单的功能电路。而我们使用最多的就是NE555芯片了。虽然现在已经忘了这些芯片的功能,但是那段时间的练习却真正的让我学到了很多模电数电方面的知识,以及对各种芯片引脚和各种电子元器件的识别。这段时间一定要感谢我的好朋友礼标和吴老板。

        我接触的第一个单片机是stc89c51,也就是大家常说的51单片机。而这个单片机让我了解到,原来我们可以通过一种编程语言来控制一个机器的电平变化。而不是我在以前焊接电路板时,只能使用简单的逻辑电路搭建简单的功能。在这里,他的功能得到了足够的扩展。而51单片机的两个重点:中断和定时器,这两样功能让我十分幸喜,因为我意识到我可以使用这两个功能来完成很多的设计了。而那时的液晶屏更是让我意识到我可以将自己想表达的意思或者监控的数据显示到我的机器上了。这是多么愉快的事情(那时总是因为一些简单的功能而幸喜,而现在回想当初的行为确实有些幼稚)。依然记得当时自己用液晶在屏幕上显示内容时的高兴。

        这个之后我还用51做了很多好玩的东西,例如LED矩阵:

        学完51单片机,我就开始学习ATmage16(AVR)单片机。这个单片机还是对寄存器进行操作的,不过相对于51来说AVR的速度确实快了很多,而且功能也更加的强大。例如在引脚的模式选择方面就比51多了好几个。而其他的中断以及AD等更是51所不能及的。因此我在那段时间用AVR做了很多好玩的东西。而这期间我用这个单片机做过一个小冰箱:

        这个冰箱在当时炎热的夏季,给我们带来了不少欢乐。而我使用到的就是一个单总线的温度传感器,其将温度测出并实时的在数码管上显示,而关于温度的控制部分,我本来打算用pwm来控制电源的开关以实现控制温度的目的,但是并没有完成这部分功能,而这部分的功能我用到了后面做智能风扇中。

        而做完冰箱我做了一些更有趣的项目——智能小车,这个智能小车有三个功能:循迹,避障和蓝牙遥控。我将这三部分功能融合到一起,通过手机蓝牙选择使用哪个功能。而这里的循迹和避障功能我使用网上的红外发送和接收模块通过检测红外线是否接收到来确定是否遇到黑线或者碰到东西,从而做出反应。而对于蓝牙遥控功能,我直接使用蓝牙模块通过串口连接以实现蓝牙数据传输。这里有一个循迹的图:

        做完小车之后我感觉自己对ATmage16芯片有了一定的了解,这时候我画了一个ATmage16最小系统的板子:

        确实只有自己画了板子,才对这个芯片有一个更深入的理解。同时也可以对外围部件以及各个部件的尺寸类型有更好的了解:

        而学还习AVR有一个让我骄傲的地方就是我写了一些AVR模块的库,这个库对我十分重要,我在使用AVR后期进行编程时主要就是对这些库中的源文件和头文件进行调用。当你学会使用现有的库时,你会发现其实库调用是多么的方便。

        学完AVR之后我就开始学习stm32,对我来说32就像是一个新的大陆,之所以这么说不仅仅是因为32在性能方面远超51和AVR,而是因为32的编程方式是调用库进行编程的。在学习32之前我一直是针对寄存器进行编程(当然32也可以针对寄存器进行编程)。而寄存器编程的特定就是你要很好的了解你所编程的单片机,也就是说你要对单片机的各个引脚及接口功能都要十分的熟悉。而对于32单片机来说就相对简单,比较适合对硬件不是很熟悉的人。也就是说就算你对寄存器的操作方式不是很熟悉也可以对32单片机进行编程。因为32单片机是一个可以调用库进行编程的。由于32单片机的很多功能都已经被前辈写好,并将其封装成库。而我们只需要调用某种功能在库中的API接口就可以了。因此使用32单片机对我们来说是一个质的飞跃。同时也让我们了解了对库中API接口调用的重要性。这将帮助我以后学习嵌入式Linux打下基础。

        我用32做的是我的毕业设计,对于我所完成的功能,我使用自己当初毕业论文的简介:

        在没有家人在场的情况下,当老人不小心摔倒而且没有能力进行自救时或者老人遇到其他的突发危险而现场没有家人帮助时,如果没有及时得到救治或者帮助,这很可能会导致老人瘫痪甚至威胁老人的生命安全。在这种情况下,我们采用集三轴加速度和三轴陀螺仪于一体的MPU6050模块对老人是否跌倒进行监测。当老人跌倒时,以STM32为核心的中央控制系统将会向周围人发出发出声光警报。如果老人有能力自己站起来,可以自行解除警报。当老人没有能力自己站起来时,装置将在警报响起10 S后通过GSM模块将从GPS模块获得的经纬度信息以短信形式发送到指定联系人。该指定联系人可以通过智能手机搜索得出老人的地址。而且本装置还有一键SOS功能,当老人碰到其他危险且没有能力自救时,可以通过按下SOS按键直接将自己的地理信息通过短信形式发送给指定联系人。

        而作品的实物图为:

        好了,做完上面的设计,我的大学也就画上了完美的句号。在此我要感谢几个人,是他们在我做嵌入式的路上指导和帮助我,并为我提供各种便利。首先要感谢的是第二课堂的汪老师,可以说第二课堂的学生能有今天的成就在很大程度上要感谢汪老师,是汪老师为我们提供第二课堂的教室,并在学习的路上指导我们。而第二个要感谢的就是我的同学,吴老板和礼标,是他们在我当初学习嵌入式时不断指引我,并帮助我学习了很多的知识。而第三个要感谢的是我的师兄:林耕风。他对我以后在嵌入式方向上的提高给了很多好的建议。同时他也是一个热爱着技术,并对生活充满激情的人。他是我很敬佩也很向往的人。好了,接下来要开启的是我的研究生生涯了。

我的研究生——迷茫中前行:

      我在研究生期间主要的课题是量子通信,而与嵌入式的关系并不是很大。而对于嵌入式的很多知识我是自学的,这里就要感谢韦东山老师的视频以及开发板,韦东山老大的开发板和视频很详细的为我们讲解了Linux在2440开发板上的运行、移植以及驱动的编写。这里还要感谢我表哥和我的同学吴老板,是他们在我当初迷茫的时候为我指引方向。

      如果用一个词来形容我的大学,我会用充实来形容,因为在大学期间我的目标明确,同时也会很有效的将自己的时间用到学习中。而对于我的研究生,我想跟多的是迷茫。初入研究生学校对很多新鲜的事物充满好奇,那时的我以为自己还可以像大学时一样有一个实验室,然后自己在其中做一些喜欢的项目。但是真实的研究生生活并不是我想象的那样,我的导师的研究课题是量子方向,因此我要学习量子的知识,而这方面知识的学习对我来说压力很大。因为在大学时我更多的时间是在实验室度过的。所以我的理论知识并不好,尤其是物理(但真正的学习下来,自己还是收获颇丰,同时也为自己在一个新的领域开启了一扇门,而相对于其他的来说,更重要的是我在这段时间证明了自己的学习能力,我发现如果你用心去学一门知识,其实也并不是那么的困难)。同时我发现我的实验室并不是我想象的实验室,我的实验室里没有示波器,没有可控电源。那时候的我十分失落,虽然比较失望但是我并没有就此放弃。在思考了一段时候之后我觉得学习Java,因为Java在那时比较火,同时也不需要任何的硬件,只要你有电脑就好了。因此我开启了Java的学习之路。现在想想那时候学的东西,似乎都已经忘记,但是那时候对于生活的态度还是很好的。我虽然不能改变我导师的方向,那么我就用课余时间去学一些东西来弥补这份失落。我记得我用GUI界面做了一个飞机大战的游戏。同时也学习了HTML,并在我女朋友生日的时候copy并修改别人的网页来为他庆生。

      我修改的网页已经找不到了,但是修改前的网页还在,这个网页是动态的,简洁但是漂亮。

      学了很多Java的知识但是总觉得心中空落落的,我知道我所学习的东西并不系统,同时也不是从底层开始做起,所以做起事来总觉的心中没有把握。同时我发现现在学习Java的人太多了,同时也发现Java似乎是每个人都可以学习的,是无门槛的,那么我的核心竞争力在哪里?这是我当时问自己的一句话,我也希望大家可以常问一下自己,你的核心竞争力是什么?

      而这时我与我哥以及吴老板的电话改变了我的学习路线。我在电话中问他们也是问自己:我应该学习什么?我的兴趣点又是什么?我要高于其他人的门槛是什么?我发现我还是对嵌入式有感情。我还是想学习有底层的东西,这样我觉得学的踏实。同时我发现学习嵌入式Linux是需要门槛的,并不是每个学过单片机的本科生就可以学习。所以我从研二的时候开始学习嵌入式Linux,而从此开始了我的嵌入式Linux之路。而也开始了我对系统的了解。我以前的博客所介绍的就是我在研究生期间学习嵌入式Linux的学习笔记和心得。

找工作——一点优势就是很大的距离:

      由于我还是学生,所以我参加的是校招,而相对于社招,校招就简单了很多。而这时你相对于其他人一点的优势,其实你就跟他拉开了很大的距离。就像我在前面所说的门槛。

      做技术的校招大多数分为下面几个步骤:

            宣讲会——》笔试——》技术面试——》HR面——》发offer

      在各位参加宣讲会之前我想大家就对自己要应聘的岗位十分熟悉了吧。如果不熟悉你可以在宣讲会时了解也不晚,但是大致的方向应该是清楚的,例如你是要做嵌入式还是要做算法,或者是做图像你应该清楚吧。而在选择岗位时你就会发现,其实平时多学一些东西还是十分重要的,因为平时多学一些东西,那么你的选择范围就相对广一些。而宣讲会时的提问就很重要了。因为回答你问题的很可能是你的部门主管,同时也可能是你面试时的面试官,所以你要在提问时让他对你有一个好的印象十分重要。所以你在提问时要有针对性,要在你的问题中体现了你在这个方向上有了一些了解,并且很想继续学下去,而他应聘的置位正好适合你,例如你要应聘嵌入式驱动工程师岗位,你可以这样提问:您好,我是学习嵌入式Linux驱动的,目前我学习了一些驱动的框架,例如输入系统和usb驱动。我想问咱们公司在驱动上主要做那个方向?上面的问题体现出了两点,第一你确实学习了嵌入式驱动的一些知识,同时你也表示你对这个职位感兴趣。

      宣讲会之后就要笔试了,而笔试其实更多的时候是在考大家的基础,或者说是一个细节。这就要看你平时编程时是不是细心了。而对于做嵌入式驱动的岗位有时候还会考你一些简单的汇编,所以希望你在平时用汇编编程时注意一些。这里我要强调的一点就是你要在这个试卷上体现出你确实学过一些知识,也就是通过你的答案让阅卷的人知道你是他要找的(阅卷的人很可能就是要面试你的人)。例如你会碰到对寄存器中位操作的试题,对于很多人可能就是简单的使用指针对寄存器中位进行操作,而这个时候你在指针声明前加一个voliate关键字就很不一样了,阅卷的人以看就知道你不仅会这道题,同时也知道你确实写过驱动相关的代码。而在笔试中另一个要注意的地方就是当你碰到不会写的程序时,写下你的思路,这个很重要。有时候阅卷人就是要看到你的思路。而对于写出程序的题,你同样要写出思路,这样可以让阅卷人更好的了解你的思路,同时这也体现了一个好的程序员的素养。

      笔试完就要通过你的笔试内容来决定是否通知你参加面试了。而技术面就要检验大家平时的学习成果了,技术面其实更多还是喜欢问你做过什么样的项目。如果你有一些项目经验,那么你就有加分项了。因为面试官很喜欢有项目经验的人,如果你没有项目经验那么你就要向面试官证明你的学习能力很强了。而这个时候面试官的问题有时候会很难(因为他会问很多学习中的细节,以及知识点的细节)。还是那句老话,在技术面时不要不懂装懂,因为对你面试的人都是这方面的牛人,他们对这方面的知识十分熟悉,所以你会什么答什么。不会的不要乱说 。要保持谦虚。

      如果你通过了技术面试,那么可以很荣幸的通知你,你被录取的几率就很大了,因为到HR面试时,主要就是来谈工资了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux——学习经历 的相关文章

随机推荐

  • 错误:try using -rpath or -rpath-link

    在使用到动态库的时候 xff0c 出现错误如下 xff1a arm linux bin span class hljs keyword ld span warning libssl span class hljs preprocessor
  • git push不用输入密码(方法一)-git-credentials

    install git credentials sh 命令步骤 xff1a touch git credentialsecho 34 http username password 64 localhost 34 gt gt git cred
  • 十、如何使用perf工具分析java程序

    问题 1 xff1a 使用 perf 工具时 xff0c 看到的是 16 进制地址而不是函数名 在 CentOS 系统中 xff0c 使用 perf 工具看不到函数名 xff0c 只能看到一些 16 进制格式的函数地址 只要你观察一下 pe
  • vins环境配置(一):kalibr标定工具箱安装

    相机和IMU标定 xff1a kalibr工具包 xff0c r os环境 Indigo xff0c 在jade版本中未曾编译通过 xff0c 应该是自己的方式不对 xff0c 有待继续尝试 xff09 在github中查找kalibr项目
  • msckf_vio使用记录

    使用环境 xff1a ubuntu14 04 indigo indigo版本的ros默认支持的是opencv2 4 8 xff0c 其带的库cv bridge依赖于opencv2 但是 xff0c msckf vio使用的是Ubuntu 1
  • 无人机姿态解算:四元数及其与欧拉角的转换

    无人机姿态解算 xff1a 四元数及其与欧拉角的转换 引言 xff1a 获得无人机飞行时的飞行姿态对于无人机稳定控制来说至关重要 无人机主要通过传感器数据融合来进行状态估计 xff0c 常用于无人机的传感器包括 xff1a MPU xff0
  • (纯干货)备战“金3银4”,拿下这101道面试题“10拿9稳””!

    前言 xff1a 马上就到了 金9银10的 面试季 xff0c 在这里作者给各位整理了一些大厂常用的面试题 xff0c 希望能对各位有所帮助 正文 xff1a 1 问 xff1a 你在测试中发现了一个bug xff0c 但是开发经理认为这不
  • 用Excel分析音视频同步

    声明 xff1a 这里主要介绍如何运用Excel来分析音视频是否同步 xff0c 希望可以对大家有所帮助 介绍 xff1a 学习音视频就一定要知道做音视频同步 xff0c 而现在我们来分析音视频同步的工具也是有的 xff0c 比如easyI
  • 使用VLC 在PC端搭建RTP环境

    声明 xff1a 本文是我在工作中遇到的关于环境搭建问题后的一些总结 xff0c 希望可以对你有所帮助 介绍 xff1a 搭建方法 xff1a 1 xff09 搭建 VLC 软件 xff0c 点击媒体菜单 xff0c 选择 流 选项 xff
  • 使用VLC 在PC端搭建RTSP环境

    声明 xff1a 本文是我在工作中遇到的关于环境搭建问题后的一些总结 xff0c 希望可以对你有所帮助 介绍 xff1a 搭建方法 xff1a 1 xff09 搭建 VLC 软件 xff0c 点击媒体菜单 xff0c 选择 流 选项 xff
  • 2020总结

    2020年可以说是我开始工作的第二年了 在第一年中我可以说了解了工作和组里的基本情况 xff0c 而这第二年就开始真正的加深学习了 还是以时间线一点点的慢慢讲吧 春节前我们一边工作一边准备年会 我们公司有个惯例那就是让每年最新入职的员工来主
  • 嵌入式Linux——网卡驱动(1):网卡驱动框架介绍

    声明 xff1a 文本是看完韦东山老师的视频和看了一些文章后 xff0c 所写的总结 我会尽力将自己所了解的知识写出来 xff0c 但由于自己感觉并没有学的很好 xff0c 所以文中可能有错的地方敬请指出 xff0c 谢谢 在介绍本文之前
  • ROS发布订阅的消息的种类及使用

    1 消息 std msgs 的种类 在 opt ros melodic include std msgs文件夹中查询 或参考 xff1a https www itdaan com tw b30f2309fe4b1b2d5993c8ea0cb
  • SSD1306部分命令

    命令描述 1 基础命令 1 1 为页地址模式设置列低半字节的开始地址 xff08 00h 0Fh xff09 这个命令专门为8位列地址的低半字节设置以通过页地址模式显示RAM中的数据 而每一个数据使用后列地址会自动增加 请参考表格9 1的部
  • 嵌入式Linux——IIC总线驱动(3):IIC驱动OLED外设

    简介 xff1a 本文主要介绍在jz2440开发板上驱动OLED外设 xff0c 使其显示我们在应用层输入的语句 而同时我将该文分成了两部分 xff0c 第一部分讲解i2c总线的实现 xff0c 而第二部分讲解在i2c总线实现后 xff0c
  • 嵌入式Linux——RTC驱动(1):RTC框架分析

    简介 xff1a 本文通过分层的方式介绍RTC驱动 xff0c 通过分析RTC在不同层次中所做的不同工作 xff0c 以及各个层次之间的关系来了解RTC驱动框架 本文分为两部分 xff0c 第一部分总的介绍RTC框架 xff0c 而第二部分
  • 嵌入式Linux——DMA:在内核中简单使用DMA实现内存中数据传递

    简介 xff1a 本文主要介绍在内核中简单使用DMA实现内存数据传递 由于本篇文章中没有介绍与框架相关的程序 xff0c 只是使用字符设备来操作DMA xff0c 同时也没有抽象的层次 xff0c 因此本文中代码分析部分就相对简单 但我还是
  • 嵌入式Linux——uevent机制:uevent原理分析

    简介 xff1a 本文主要介绍uevent机制是什么 xff0c 并通过代码分析使用uevent机制生成设备节点的过程 而本文将分为两部分 xff0c 第一部分我们介绍一些预备知识和uevent的原理 xff0c 而第二部分 通过代码介绍使
  • 嵌入式Linux——kmsg:分析/proc/kmsg文件以及写自己的/proc/mymsg

    简介 xff1a 本文主要分析 proc kmsg文件的形成过程以及使用cat proc kmsg查看log buf中的信息时所要经历的代码 并结合上面的分析写自己的 proc mymsg和myprintk Linux内核 xff1a li
  • 嵌入式Linux——学习经历

    简介 xff1a 本文主要介绍我学习嵌入式的经历 并结合自身的经验希望可以对大家有所帮助 视频及教材 xff1a 郭天祥相关视频及教材 xff0c 天狼星相关视频及教材 xff0c 野火迷你相关视频及教材以及韦东山100ask官网所介绍的视