嵌入式工程师的2022 || 2023

news2024/11/21 2:35:57

因为一些个人关系,2022年初我从北京回到了石家庄。在找工作,包括后续的研发工作中,不同地点的经历在对比中我逐渐总结出了一些经验。关于“人”方面的感悟我就不赘述了,下面主要在这里总结一些找工作做工作的经验,希望能够帮助到各位读者。

当面试官问这些问题时,他们究竟在问什么?

  • 实现一个链表的过程。

现在无论是在哪个平台,用哪种语言,都没人手写链表了,Linux内核中自带list.h的使用、详解文章都变得很少了。那为什么面试官还是喜欢问链表、数组、排序等问题?他们其实都在问对《数据结构》的理解。我还记得我在学这门课程的时候印象比较深下图的哈希表。

再延展一点,面试官可能会问一些有现实背景的智力题,大部分也可以在《离散结构》中找到答案。《数据库系统》问的就少了,我至今,连个mysql用作嵌入式数据库的项目都没有碰到过。《计算机组成》算得上是计算机这行的童子功了,问的比较多的也就是大小端(字节序)的问题。

  • 什么是实时操作系统

这个问题的题眼很明显是实时,但是你同时需要对《操作系统》这门课程有一定认识,才能说明白这个问题。常见的FreeRTOS,

  • 首先需要能够提供多优先级区分的任务(有独立的任务栈)线,这也是为什么要上操作系统的原因,大部分业务简单情况下裸跑代码都是最优解。

  • 高精度计时系统以及实时调度系统,例如Systick定时器来实现精准的系统节拍。

  • 硬件平台支持多级的中断嵌套机制。

再延展一点,面试官可能会提一些实时操作系统项目开发过程中遇到的一些问题,就比较细节了,诸如同步信号量/互斥锁的使用,任务优先级选择的原则,以及一些任务间通信的机制。这块具体问题就具体分析了,最好是结合自己实际遇到的情况,讲述一个问题解决的过程。

  • 你掌握的技术栈都有哪些?

这个问题一般会需要你结合着项目过程中不同技能的使用情况串起来讲一下,当你讲到某一项面试官觉得跟当前岗位有交叉的地方,会让你展开讲讲。下图是某培训机构总结的嵌入式书库。

我就不按单项目来走了,我顺着上边的思路来简单说说各项是怎么再项目中应用的。

  • 编程语言在嵌入式项目中大部分用的都是C语言,而C语言现在很多高校都不再教了。理解一下指针,用递归求一下累加,其实从基础语法和标准库来看,C语言自学确实比较合适。但是C语言真正的魅力在于不同环境下的使用,从操作系统编程,到UNIX环境高编,再到网络编程,大型工业控制软件,你会发现同样是C语言,却各有各的特色美丽。

  • 如果面试公司是搞Linux的,大概率会问一些shell命令以及脚本语言或者Vim快捷键这些细碎但是你要是干过一定熟悉的命令。如果面试公司是搞裸跑单片机的,一般会问一些编译选项的问题,常见的就是不同优化等级对代码的影响。如果是搞Android的,那adb命令肯定也会问两嘴。

  • 《嵌入式操作系统》我们学的就是《深入理解Linux内核》和《Linux内核设计与实现》,非常理论,我还记得最后一道论述题考的是编写一个简单的字符设备驱动。我个人是没有什么内核开发的经验,顶多是进行一些功能的裁剪,驱动的加载适配等,这块我就不误人子弟了。

  • 上图对嵌入式应用开发的细分就比较狭隘了,大部分都是基于POSIX提供的系统接口开发路线。其实作为一个嵌入式工程师,接触到的接口种类,语言类型都是比较广泛的,像是基于无线蓝牙协议栈,抑或是使用python或者C++的标准库,甚至还有基于安卓平台的业务开发,都是能接触到的。最常见的还是各种私有协议,或者一些成熟协议栈的再次开发。

  • 嵌入式驱动开发这块我是很早以前搞的了,像是Linux和Android下边几种类型驱动的整个流程都能说得清楚,驱动的调试方法也说的明白基本就差不多了。驱动这几年貌似改动挺大的,我就不误人子弟了,如果读者您能知道面试部门所开发的驱动类型(视频芯片、存储设备),所用的操作系统和中间件,提前准备准备会事倍功半。

  • 有没有一些硬件基础?

问这个问题,一方面是因为作为嵌入式工程师,调试新板卡,与硬件工程师沟通都是免不了的工作内容,要对《电路分析》,数电模电有一定了解。能够看懂SCH(原理图),调试板卡的时候能供使用诸如万用表,示波器等仪器,分析一些常见硬件问题的原因。一般的公司不会要求能够绘制PCB(板图),当然,会画一些简单的调试板卡,焊接等技能都会根据公司岗位特性相应的加些分。

这个问题有时还有一个小的侧面,那就是《EDA技术与电子CAD》这门课程涉及的东西,因为嵌入式这行往硬件偏的有在用Verilog做FPGA开发的,还有做PLC编程的,这些东西如果有一些经验的话,会对嵌入式驱动开发有一定的指导意义。

  • 一些关于你简历上项目的问题

如果面试官在你的简历上的项目描述看到了自己感兴趣的技术,他就会着重的问题,这个时候你不用着急,慢慢说就可以,也不要因为它一点反馈没有而着急,因为可能他真的也不太懂。还有就是每一次的项目多多少少都会牵扯到业务上的事情,这些东西干过类似的项目都会相通的,多说些细节有助于给到面试官一些正反馈。

我如何完成领导交代的任务

工欲善其事必先利其器,快速搭建一个完整的嵌入式开发环境对于完成领导交代的任务,显得尤为重要。我这里简单粗暴一点,分硬件环境和软件环境,两小节说明一下常见的环境搭建过程以及遇到的一些问题。

硬件环境

常见的硬件环境第一个主体是板卡,这个板卡可以是从芯片厂商买的开发板,抑或是公司内部硬件工程师绘制的PCBA,为了将硬件环境搭建完成,由以下几点需要注意:

  1. 供电。根据板卡入口电压芯片手册或者开发板手册,调整稳压源供电电压(稳压源选择能够显示通道电流),根据供电线正负引脚定义,正确连接板卡至稳压源(这步可能需要我们自己用剥线钳拨一根黑的和一根红的线,并焊接一段至板卡上),将板卡妥善放置(如果调试系统涉及有多个板卡,建议用亚克力板搭一个调试塔),上电前测量电地是否短路。

  1. 连接仿真器至板卡,常见的仿真器有Jlink,ST-link等,他们通过板卡上预留的接口与电脑相连,电脑在使用仿真器之前需要安装相应的驱动,仿真器能够提供固件下载,在线仿真等功能。Jlink内部有一个跳线帽,可以跳接选择是否供电。

  1. 调试口连接。一般的板卡都会留有调试串口供MCU向外打印调试信息,一般都是TTL电平输出,需要我们准备TTL转USB的小板,按照线序正确连接小板至我们需要调试的板卡(一般是TXRX交叉连接),然后将小板USB接口插入电脑,并正确安装小板驱动。常见的驱动安装问题在网络上都能搜索到。串口如果不通,先判断线是否接对,可以尝试TXRX交换。然后判断包括波特率在内的一些基本参数板卡与电脑配置是否一致。

软件环境

  1. 集成开发环境(IDE)。STM32的片子用Keil,也有一些用IAR;Ti的片子用CCS;NXP的用MCUXpresso;不同的芯片厂商针对自己的芯片会提供不同的集成开发环境,但是所有的集成开发环境都有工程管理、代码编辑、编译、下载、程序在线仿真等功能。利用程序在线仿真,我们能调试一些诸如死机等疑难杂症。不要害怕接触一个新的集成开发环境,这对我们嵌入式工程师来说是常态。

  1. 调试工具。一些通用的串口/网口调试工具,能够帮助我们看到原始的网络报文信息,建立TCP链接发送\接收业务协议,或者发送一些AT指令和打印一些Log信息。我们还需要准备一个上位机开发的环境,看您是C#还是QT,抑或是Python熟悉,因为我们仅在一些开发默契可能需要提供给测试一些小的工具,所以用什么语言无所谓,看您什么顺手。

  1. 虚拟机。如果您的板卡上跑的是Linux系统,那么大概率您需要在电脑上安装一个虚拟机,并在虚拟机上运行Ubuntu操作系统。我们需要在虚拟机上编译裁剪Linux系统代码,并将其烧录到板卡上,同时我们还需要搭建交叉编译环境,将我们开发的业务软件安装到系统上。

一些年初和年终的想法

2022年这一年,工作地的调整让我本人除了技术方面,其实更多的是一些“情商”方面的提升。我学习到了很多工作上的方式方法和处理原则,单每一条都再写一篇博文了。同时我还认识了不少与我有着相似学习,工作和生活经历的人,让我对我现在的生活又有了一些新的认识。

  • 厚积薄发,只有不断的积累才能不惧改变。

  • 知行合一,只有全力以赴才能不留遗憾。

  • 宽以待人,只有善良的交际才能留下真诚的朋友。

2023年,预测一下我们这个嵌入式这个行当的一些关键字吧。

L2级别自动驾驶前装渗透率不断提升,逐渐迈向L3/4

工业物联网数字化

国产替代

融合

最后,让我用下面用一段Matlab代码,来结束这一篇博文吧。

f=@(x,y,z)(x.^2+ (9./4).*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3;
[x,y,z]=meshgrid(linspace(-3,3));
val=f(x,y,z);
[p,v]=isosurface(x,y,z,val,0);
patch('faces',p,'vertices',v,'facevertexcdata',jet(size(v,1)),'facecolor','w','edgecolor','flat');
view(3);grid on;axis equal;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、迁移学习和多任务学习

文章目录1、迁移学习2、多任务学习3、端到端学习THE END1、迁移学习 \qquad迁移学习是将某个任务学习到的知识(神经网络的参数信息)迁移到另外一个相似的任务中使用,从而重复利用相似任务学习共同之处,节省模型训练的时间,提高模型的训练效率…

一名普通22届本科毕业生|前端程序员|22年年终总结

文章目录22年上半年:最后的学生时光隔离实习币基金迷茫困惑难受不要去想人生意义读书景点环境的力量再次隔离返校入职前的学习22年下半年:上班工作生活总结本来准备在22年年末写的,奈何那段时间工作太忙没抽出时间。现在是23年的1月27日&…

paddleOCR代码工程的MD模式改造

一、下载cmake_3.22.3,用于生成vs工程 Index of /files/v3.22 下载完成,解压文件,打开cmake-gui.exe,即可使用: 二、下载Git(Git-2.36.0-64-bit.exe)并按照默认路径安装,cmake需调用…

使用Moment格式化时间出现时间差

诶嘿,很离奇。前些天后端老哥给我说我这时间展示不对。 我就奇了个大怪,就是取的这个字段嘛,怎么肥事😭 看半天发现是时间格式化出的问题。 原代码⬇️,看起来没毛病嘛,值打印出来也与接口里的这个时间一…

到底卡在了哪里,2023年再撒谎网慢就说不过去了

前言互联网下行带来灵魂追问。钱花哪去了?产出在哪里?动辄自建的遮羞布逐步显现,不过自建的成本可能还不是最大的负担,掣肘的可能是把不重要的事情当成了主业来做,比如:互联网比如数字化转型比如研发效率和…

Verilog HDL基本语法规则

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库&#xf…

10大面试必备的排序算法 Python 实现(附源码)

今天给大家分享一篇关于Python实现排序算法的文章,来自GitHub。 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一…

STM32入门基础

GPIO <1>说明 引脚电平&#xff1a;0~3.3V&#xff0c;部分可达到5V(参考引脚定义&#xff0c;带FT的就可以) 同时 GPIO有两个模式 输出模式&#xff1a;进行端口高低电平的输出&#xff0c;用于驱动LED&#xff0c;蜂鸣器等 输入模式&#xff1a;读取端口高低电平…

SimBERT剖析

SimBERT SimBERT&#xff0c;它是以Google开源的BERT模型为基础&#xff0c;基于微软的UniLM思想设计了融检索与生成于一体的任务&#xff0c;来进一步微调后得到的模型&#xff0c;所以它同时具备相似问生成和相似句检索能力。 UniLM UniLM是一个融合NLU和NLG能力的Transfo…

远程桌面控制:SmartCode VNC ViewerX ActiveX 3.10 Crack

SmartCode::ViewerX VNC 查看器 ActiveX 毫不费力地将 VNC 查看器功能添加到您的应用程序 SmartCode ViewerX VNC 查看器 ActiveX 使开发人员可以使用一组直观的 ActiveX 属性和方法完全访问 VNC 查看器功能。借助ViewerX 控件&#xff0c;开发人员可以轻松地为其应用程序提供屏…

将自己写的代码利用git 上传到码云(gitee)或者github----最简洁明了版

前置操作 注册并激活码云账号&#xff08; 注册页面地址&#xff1a;https://gitee.com/signup &#xff09; 生成并配置 SSH 公钥 官方提供的生成并配置公钥的方法点此 创建空白的码云仓库 输入仓库名称之后路径会自动生成 把本地项目上传到码云对应的空白仓库中 如果您是…

MyBatis-Plus快速开始

文章目录介绍特性框架结构传统编程模式快速开始介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。只做增强不做改变的意思是&#xff1a;MP不会影响原生的 M…

[HITCON 2017]SSRFme(perl脚本中get命令执行漏洞)

目录 代码审计 思路 知识补充 PHP中$_SERVER的详细用法 pathinfo() 函数 str_replace() 函数 escapeshellarg peal函数中get命令漏洞 Perl中open命令执行&#xff08;GET&#xff09; 代码审计 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers…

GuLi商城-项目初始结构创建

GitHub账号和密码 账号&#xff1a;11360XXXXXqq.com 密码&#xff1a;ZH**SH*19**1016 新建仓库&#xff1a; gulimall 记得勾选下Add a README file&#xff0c;上面忘记勾选了&#xff0c;实际建议还是要勾选下 复制路径&#xff1a; 打开IDEA检出项目 创建商品微服务模…

flutter 作为模块引入 iOS 项目

原文 http://summerxx.com/2023/01/28/ios-use-flutter/ 前言: 上篇我讲了下 flutter 环境在 MacOs 下搭建, 今天写下如何在一个成熟的 iOS 项目内引用 flutter, Demo 会放到文章最后哈 上篇 : MacOS 下配置flutter 环境 大致如下: 在项目内创建一个 flutter 模块 新建一个 …

Unity 在URP中显示动态批处理 Dynamic Batching 选项

Unity 在URP中显示动态批处理 Dynamic Batching 选项前言步骤1. 打开 Preferences 设置2. 选择 Core Render Pipeline 选项卡3. 修改 Visibility 为 All Visible4. 打开 Project Settings5. 打开 Graphics 选项卡6. 找到 URP 设置7. 开启 Dynamic Batching鸣谢前言 使用URP时突…

计算机相关专业提升学历的解决方案(本科及以下)

文章目录1、学历与学位的区别1.1 学历与学位的概念&#xff0c;学籍的规则1.2 学历与学位的作用2、正规全日制本科2.1 高考2.2 统招专升本3、继续教育&#xff08;非全日制&#xff09;3.1 自学考试&#xff08;无学籍&#xff09;3.2 成人高考&#xff08;函授&#xff0c;业余…

详谈ORB-SLAM2的跟踪线程Tracking

ORB-SLAM2的三大线程几乎都是每个部分对应一个函数&#xff0c;非常清晰。函数名起的都十分贴切&#xff0c;望文就能生义&#xff0c;我们更应该关注的是里面的关键帧地图点这些变量是怎么流转的。 Tracking线程的流程就是&#xff1a;首先输入一帧图像&#xff0c;然后实际上…

开启前端CSS学习之路-css003

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 目录 CSS引入方式 一、CSS的三种样式表 1.内部样式表 2.行内样式表 3.外…

用java判断闰年

闰年的判断&#xff1a; 能被400整除的年份是闰年能被4整除的但是不能被100整除的年份是闰年 import java.util.Scanner; public class leapYear{public static void main(String[] args){int year;Scanner sc new Scanner(System.in);year sc.nextInt();if((year % 400 0)…