那时我已经在读研究生了,我的科目是CV,我开始了各种炼金实践。 在日复一日的参数调试过程中,我逐渐迷失了自己。 感觉自己调参很厉害,各种智能模型算法都讲了,吹牛了。 直到我在小坡站发现了志辉先生,我才被他的身手打了一巴掌。 我很惭愧,因为我明明想走这样的路,却越走越远,越来越得意。 不需要懂技术,也没有大佬们的创客精神。 我承认,那一刻我是无比的羡慕和嫉妒的。 我想追他们,所以我开始冲锋。
由于有了基础,我很快就拿起了单片机,但如果想突破现在的水平,就需要走进阶路线,于是我开始专注于Linux。 一开始并不容易,因为我不知道如何学习Linux。 我只看了一些Ubuntu系统操作的书籍,但无法在开发板上进行实践。 我搜集资料,找啊找,找到了正电原子。 有免费的说明书可以看,但是有700多块开发板,这让我无法忍受(因为我担心有了书,同样的开发板可能无法在我的电脑上配置成功)电脑上,我以前试过)。 于是,我就寻找一款便宜的开发板,找到了全志系列。 虽然我没有太多的信息,但是对于学习来说,如果没有钱去投入,我就只能动脑子和时间了。
后来我就教课程,给新手指导。 来这里的都是新手,所以我更清楚大家需要什么。 免费资源很多,但Linux配置和使用问题较多。 没有人能把它们全部解释清楚。 只有回答问题,才能解决各种新的、未知的问题,才不会长期拖延。
好了,基本心路历程基本说完了,以后再补充!
接下来讲一些有用的信息,和大家分享一下从零开始嵌入式开发的路线。 让我们共同进步! 经过四个月的刻意训练,相信你能够入门并了解嵌入式开发,对各个方向有一定的了解,能够找到自己感兴趣的方向。
1. 硬件基础(时间投入:✊)
对于我们这些想成为嵌入式工程师的人来说,硬件并不需要我们花很长时间去了解它。 基本上任何一家中型以上的公司,都会有硬件设计师的职位,甚至还会有专业的PCB Layout工程师。 因此,我们只需要花不到一两周的时间(这里是指每天半个小时)来了解一些必要的硬件知识。
首先要学习的是了解各种基础电子元件,如电阻、电容、电感、二极管、三极管等,并对它们的基本用途有一定的了解。 还需要熟悉电路中各种元件的符号,学会看懂电路原理图(看不懂各种符号就无法知道电路图中元件的电气连接关系)。
必须学习的是对基本电路的理解。 例如:单片机的最小系统电路(单片机、复位电路、晶振电路)、按键高低电平识别、LED高低电平操作等。 一眼就能知道各个引脚的连接关系以及各个功能模块需要使用哪些引脚进行调试就可以了。 这部分没什么。 看一下51开发板和32开发板的原理图(我直接给你三份,一份是51、32和全志芯片,其中全志稍微难一点),你就明白了很快就开始吧。 。
如果你在入职期间没有学到最后的东西,你可以在工作后做这个任务。 如果有机会锻炼一下就更好了。 根据设备接口就可以完成设备与单片机或者Linux系统开发板的连接,因为我们总会遇到新的设备。 但即使是新设备也只会使用一些通用的协议传输方式,并且仍然使用IO端口进行复位或片选。 自己接线时最需要注意的是电源。 如果电压过高,可能会烧毁设备,或者开发板彻底报废。 如果电压太低,设备可能无法稳定工作,并且错误可能难以发现。
推荐书籍:
《为初学者从头开始介绍电子设计》
《51单片机任意开发板电路原理图》
《32位单片机任意开发板电路原理图》
推荐视频:
书籍和视频是其他人的经历。 先学习,再创造。 光看视频不如书本那么详细,所以书本起着至关重要的作用。
2. C语言(时间投入:✊✊✊✊)
你必须学习每一本书,每个视频都会将C解释到相同的水平,所以只要跟着书或视频学习指针和结构,然后慢慢进化。 实战更重要,所以尽早进入单片机学习。 当然,C也不能落后。 每一次回访都会有所收获。 这是为了让大家尽快进入实战,找到学习的乐趣,然后挖掘出枯燥但有用的知识点。
必须学习的基础知识包括:基数转换、变量和常量的类型和范围、宏定义、算术运算、逻辑运算、关系运算、switch while的四种常用语句、函数、形参和实参、全局和局部变量、数组字符串、结构体、指针; 还有可以稍后添加的内存、联合和数据结构。 不要试图一次性学习所有内容。 除非你在上学,否则在上班之前你就会饿死。
推荐书籍:
《C 和指针第二版》
《Linux C编程一站式学习》
推荐视频:
3. 51单片机(花费时间:✊)
必学网站上很多人对于初学者是否应该学习51单片机存在很多分歧。 我的建议是学习,但不要沉迷。 51单片机是所有芯片的鼻祖,也是8位芯片的代表。 如果你学会了控制51单片机,你就基本上知道如何控制更高级的芯片了。 但先进的芯片会有专业的厂家工程师提供API函数供调用。 关于51单片机需要了解什么? 许多初学者抄袭并击败别人的代码。 他们甚至不知道为什么分配引脚 0 和 1。 他们给寄存器任何其他人赋予寄存器的值。 搬运工是没有用的。 这也是很多网上课程的诟病,所以我通过手册开设了写代码的课程,让大家知道根本原因在哪里,如何配置寄存器,配置哪些寄存器。 这些其实都写在说明书上了。 请耐心阅读。 学习本手册的学生读完后会有一个大致的了解。
一些初学者(像我一样)从 LED、按钮、蜂鸣器、显示器、SD 卡、蓝牙、WiFi、继电器、红外开关、电机和伺服系统开始。 他们喜欢为自己玩过多少模块而感到自豪。 事实上,驱动程序代码都不是我自己写的。 而且回过头来看,其实大部分都是通用的输入输出功能,再加上串口协议、IIC和SPI协议,连高级协议51都玩不了。
学习51单片机是很有必要的。 学会这几个知识点就够了:了解芯片各个引脚的功能(必须看手册)、输出(LED)、输入(按钮)、外部中断、串口通信、定时器。 协议是在32中学,不要在51浪费时间,总是去低端。 (当然,如果你想在51单片机上练习C语言高级编程,方向上没有区别,可以多玩玩,总之,一定有一个方向可以提高)。
推荐书籍:
《新概念51单片机C语言教程》
《STC89C52数据手册》
推荐视频:
推荐开发板:
一个宝宝搜索江苏科技大学的51单片机(其实下面可以找到推荐的视频链接)
4. 32位单片机(花费时间:✊✊✊)
32片单片机非常重要,因为现在32片单片机的销量在全球各大公司中销量都非常高,主要是因为其性能好,成本低,深受喜爱。 这个东西比51强大多了,可以直接输出PWM来控制电机转速,还可以直接捕捉外部脉冲周期。 它有30多个定时器(仅f1系列)等,手册有,就不详细说了。 。
32位单片机推荐必学知识技能: 了解芯片各引脚的功能和复用功能(必读数据手册、库函数手册(标准库、HAL库任选其一)、浏览cortexM3内核手册 是)、输出(LED)、输入(按钮)、外部中断、串行通信、定时器、PWM、输入捕捉、IIC、SPI协议。 好的,学习这些并做一些小项目来练习你的技能(贪吃蛇游戏、物联网汽车和物联网天气显示)。 既然想到这里了,那就去找工作吧。 您不必等待就可以了解自己拥有多少知识。 如果你去公司,你会根据项目来调整你的知识和技能体系。 你现在需要的是一个锻炼的机会。
如果你还有时间学习(强烈推荐现在的学生),请迈入Linux开发。 当然,如果想了解32单片机,可以先在FreeRTOS系统上玩玩操作系统,熟悉一下系统下编程时需要考虑的点(我个人直接使用Linux)。
推荐书籍:
《STM32不完整手册库函数版》
《CortexM3 权威指南》
《STM32F10中文参考手册》
《FreeRTOS源码详解及基于STM32的应用开发》
推荐视频:
推荐开发板:
一个宝宝搜索江苏科技大学的32单片机(其实下面可以找到推荐的视频链接)
5. Linux驱动开发(时间投入:✊✊✊✊)
这是非常重要的。 即使以后去其他方向,也建议稍微了解一下这个。 这是基础,可以让你学会在编程中出现问题时进行分析。 Linux非常庞大,网上的资料也很多。 这真的就像学习从东方到西方的一切。 学了之后还是感觉自己什么都不懂。 为什么? 因为一是信息不可能很详细; 其次,你不知道开发者使用的开发板是什么,也不知道软件版本是什么,所以如果有人从头到尾,你一开始就卡住了,你肯定可以在网上找到这些。 没有详细的指导,人们如何赚钱?
要知道Linux走的是高级开发路线,所以只要你好学,你就会成为单片机,不用玩就能学会(不知道谁说的)可以通过学习来学习技术,而且资料很多,问题也很多,特别是Linux,真的会崩溃)。 Linux驱动开发属于底层,构建在内核态以下。 不过经过多年的发展,它也有了一个编写框架,所以并没有那么复杂。
在写驱动之前,还有一件重要的事情,就是芯片移植和驱动移植,即将Linux系统移植到现有的ARM开发板上。 需要考虑开发板本身的外设,这需要Linux内核。 我有一定的了解,也推荐优秀的书籍。 接下来是驱动开发的学习路线,请查看:
一定要学会基本的Linux命令(shell命令,不用拼,掌握常用的就可以了。如果你不知道常用的,我推荐另一个网站,百度搜索“Linux新手教程”) -> ARM系统移植(不是移植到如何使用开发板,而是对于初学者来说,可以使用别人搭建的现成的uboot、Linux镜像、根文件系统)。 当你以后了解更多的时候,你可以阅读更多关于内核源代码的内容,你将能够自己玩弄各种东西。 源码搭建->字符设备驱动开发(包括,从简单的对LED的寄存器读写操作开始,然后学习设备树下LED驱动的开发,接下来是基于pinctrl和gpio子系统的GPIO输入输出开发、中断、阻塞和非阻塞,接下来是设备树下基于平台平台的设备驱动、MISC驱动实验、INPUT子系统实验、IIC驱动、SPI驱动,其中阐明设备树、pinctrl、平台、MISC和INPUT开发的关联和区别) -> 块设备驱动开发(RAM模拟磁盘,对于存储设备,我没有尝试过) -> 网络设备驱动开发(转向网络工程师)
推荐书籍:
“和我一起写Makefile”
《UNIX环境下的高级编程》
《深入理解LINUX Kernel_3rd版》
推荐视频:
好像开源视频不多,去搜一下吧。 反正他们基本就是卖板子发视频(大家都懂)
6. Linux应用程序编程开发(时间投入:✊✊✊)
没什么可说的。 这就是很多人对嵌入式软件工程师的想象。 更准确的说,是比较合适的。
你必须学会直接告诉路线:
文件IO操作(基本读写开闭和高级IO操作)、文件系统资源及管理、信号、进程间通信、线程间同步,然后结合开发板点亮LED(Linux有特殊功能)、GPIO应用编程、输入(按钮)编程、串口应用、网络编程基础(转给网络工程师)。 除了网络编程这个专业方向外,这部分也要掌握。 最好学习一下多线程开发。 即使你只懂一点点,也会提高你面试时的竞争力。 这并不意味着您可以编写基本的文件读取程序。 你总是可以通过输入大量代码、学习代码、然后向更困难的方向靠拢来提高。
推荐书籍:
《UNIX环境下的高级编程》
《TCPIP详解卷》
7.Linux界面开发(花费时间:✊✊✊)
你必须学会直接告诉路线:
了解C++的基本特性和语法(和学习C语言时类似),了解各种QT控件(参见更多QT软件手册,QWidget,Qwindow,pushButton,标签,文本,列表等),定时器,文本阅读以及写作、绘图和表格、多媒体。 这部分主要是学习布局,有一定的美感,对各种控件的理解和应用越熟练越好。 然后是网络编程(转向网络工程师)。 然后QT连接开发板进行上位机应用、云端控制等,其实还是控制开发板的输入输出以及串口通信获取数据。 以前我一直觉得这部分是最简单的,只是界面设计。 其实能做到极致的就是老板们,每个月可以比普通技术人员多赚几W。 为什么,去看看我在下面写的内容。 请链接到精彩的博客以刷新我们的理解。
推荐书籍:(如果你有好书,我会分享给你,你可以通过阅读软件自带的帮助手册来练习内功)
《QT软件帮助按钮下各种功能介绍》
推荐视频:
精彩博客推荐:Qt/C++原创项目作品精选(祖传原创/凶猛性能/精致界面)_飞扬青云的博客-CSDN博客
虽然代码被复制、被修改,但最竞争的是编程思维。 能够独立开发项目的工程师,走到哪里都会受到重用。 当然,项目结束后,就会被搁置。 不要去想哪家公司会成为你的终生工作。 上岸了,先杀掉喜欢的人,做大了,先裁掉工程师(这是人性,是钱)。
写在最后,真爱会让你敢于独自走在黑暗的小巷,找到一条坦途。 否则,就只是赚点钱,满足一下自己的小欲望而已。 不要让你的实力配不上你的野心。 另请注意,您不必涉猎所有方向。 只要选择一个方向深入,其他领域就会成为你自己的拓展领域。
书山有路,勤奋是路,学海无边,努力是船。
沉船旁千帆过,病树前万树春。
会有风吹浪破,直挂云帆济沧海的时候。