百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

嵌入式真的没前途吗?

bigegpt 2024-09-03 11:10 4 浏览

在众多的计算机编程语言里面,有一门嵌入式的语言,他不像Java和测试那么热门和得到重视,学的人也没有那么的多。于是有很多人在学习的时候便会有想法觉得嵌入式真的没有前途吗?

用发展的眼光看,万物都有周期。这个和嵌入式无关,和行业有关,一个行业的增长有关,和资本有关,和国家目前的发展有关。所以只有天时地利人和,而这个人和,就是你自己的选择。

对此这是我的看法,也欢迎大家发表自己的看法。

如果打算入门嵌入式学习,那就和大家聊聊嵌入式学习路线。

什么是嵌入式?

嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统。

国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

嵌入式是一个比较多学科综合的方向,有很多细分的方向。其实可以直接切入某个细分的领域,然后介绍一下学习路线,比如单片机开发,Linux应用开发,Linux驱动开发。

但是不难发现,虽然是很多细分,但是需要学习的知识有所交叉,有的又相互独立。

嵌入式的相应招聘岗位,基础技能树要求其实相差不大,不过有很多对行业绑定比较深的岗位,会要求有行业经验和这个行业沉淀的相关技能;

比如汽车电子要求can,autosar;

物联网要求网络协议,单片机,RTOS,WiFi,Bluetooth等等;

BSP工程师要求掌握Linux内核和各种子系统;

机器人相关要求掌握ROS;

岗位还有很多,这里就不过多列举了,下面分享一下我认为的比较万金油的学习路线。

下面是我整理的思维导图。简单来说一下传统的学习路线。

编程基础

C语言

这是必须要精通的。C语言非常灵活,可以进行单片机开发,驱动开发,固件开发,内核开发,应用开发,几乎都可以用到。

比如著名的操作系统Linux,主要就是C语言实现的,当然还有很多基于C语言的项目,这里就不一一介绍了。

学习C语言,我比较喜欢浙大翁恺老师的课程。

C++

C++在嵌入式中更多是应用开发方向,因为对C有较好的兼容,所以在硬件方面仍然使用C进行编程,而较为复杂的业务逻辑部分,则使用面向对象的C++进行封装和实现。

C++和C的混编也是非常实用的。

数据结构与算法

合理地使用数据结构,它会让的开发事半功倍,常用的数据结构,比如队列,链表其实在嵌入式的开发中十分常见,当然还有hashmap,二叉树等等。

如果编程语言是武器,那么数据结构就是招式。什么样的场景,使用什么样的招式,数据结构里大致都写了。

其他编程语言

还有很多其他的编程语言,我这里列举几个。

shell

这是脚本语言,在Linux上比较常见,一般来说,掌握shell,可以大大提高工作效率,这个是强烈建议熟练掌握的,遇到不懂的可以多看man page;

python

很方便,大大提高效率。用于验证一些算法功能,或者办公自动化。

硬件知识

这里的硬件知识并不是对于做纯硬件开发的路线,而是做嵌入式软件开发,需要掌握哪些硬件知识,下面详细来说一说

硬件基础

具备最基础的硬件知识素养,如果是做驱动的开发,比如BSP工程师,必须具备最关键的两点,可以看懂芯片的Datasheet,可以看懂原理图,因为要做板机的开发。

常见的通讯协议

比如UART,I2C,SPI协议等等,这三个比较常见,也相对比较简单。其他还有很多通信协议,这里就不再介绍了。

常见的片上外设

比如gpio,adc,dac,watchdog,timer,pwm这些,原理都是一样的,但是一般的SOC基本也都是类似的外设。

常见工具的使用

示波器,万用表,电源的使用,至少不能经常把正负极接错。示波器便于用来查看时序,开发的时候方便排查问题。

嵌入式系统

嵌入式操作系统的话,通常看具体的需求进行划分,常用的实时系统有ucos,freertos,rtthread,vxworks等等,而Linux系统也十分常用;

实时系统

通常来说,实时系统大多用于用于控制的场合,比如ucos,freertos,rtthread,vxworks等等,都是实时系统。

Linux系统

Linux系统应用比较广泛,智能硬件,监控设备,路由器,手机,汽车等等,都有它的身影。大致方向主要分为Linux驱动和Linux应用,两者的界限已经模糊不清。技术架构上分为用户空间和内核空间,如下图所示;

应用

如果是应用开发,其实和纯软件开发差不多了。

基础内容,其实前面也有一部分提及,Linux系统编程,多线程,操作系统层面的基本知识,互斥,信号量,网络编程等等。

具体应用,比如音视频的开发,运动控制,机器人开发等等;

推荐看《Unix环境高级编程》,这是基础。

驱动

对于底层知识的掌握要求比较高,至少板机Linux的编译,剪裁,移植等内容。

可以根据具体硬件需求,添加相应的驱动到系统中,因为系统已经规定好相应的驱动框架,因此需要了解各种内核子系统和各种类型的驱动。比如字符设备驱动,块设备驱动,设备树的使用等等。

深入学习子系统也是一个难点,可以帮忙更好地了解Linux,例如进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)。

比较推荐的学习资源,宋宝华老师的Linux内核4.0驱动书籍,韦东山老师的驱动视频,互联网时代,搜一下就有了。

总之,技术在于积累。

其他

上面说了这么多,如果要保持技术的精进,需要保证持续学习,多看优秀的源代码,找优秀的开源项目。

非常规学习路线

在掌握部分基础知识之后,也可以尝试这种学习路线,按照项目的形式进行学习。

定一个目标项目,例如;

在Linux系统上实现一个程序,如果非得和硬件沾边,比如做一个人脸识别的门禁系统;

比如要在一个板子上移植Linux系统,并添加驱动;

用单片机开发一个小项目,完成软硬件的设计;

以上完全是三个不同的方向了,因为每个人的具体情况都不相同,可以根据自己的技术栈和兴趣爱好来做,想不到做什么的,找一些开源的项目,自己复刻一下,也是很好的。

有了目标之后,将任务拆解,这中间会遇到很多知识盲区,会用到上面我提到过的很多知识,这时候你就要去学习,去吸收,带着目的去学习和实践,效果反而会更好。

总结

这篇文章总体上介绍了嵌入式的学习路线,相对宽泛和简略,由于嵌入式的知识体系确实很庞大,单纯从个人角度去写,还有很多片面和局限的地方。

希望对一些想要加入这个方向的同学有所帮助,如果本文存在错误或者需要改进的地方,欢迎您的建议,有任何不懂的地方也可以在下方评论区留言交流。

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...