电子产业一站式赋能平台

PCB联盟网

搜索
查看: 140|回复: 0
收起左侧

嵌入式MCU工程师,面试常被问及的问题。

[复制链接]

493

主题

493

帖子

1868

积分

三级会员

Rank: 3Rank: 3

积分
1868
发表于 2024-11-5 17:50:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师" s$ E& ?' ?6 l: c- T
关注我,一起变得更加优秀!有些工程师可能觉得单片机没啥技术含量,但事实是单片机涵盖的技术非常之多,从底层到应用,应该没有一个人能熟练掌握其中所有的技术。- F) y7 c( H* ?, h: s2 F7 b: k6 h

& P; u0 x$ P; v6 e3 U0 I这里就站在面试的角度来说说:单片机工程师面试常见问题。0 h7 X3 E- W. x- C$ A1 W
+ W( N$ O2 {( e+ j+ C
1、单片机上电之后不运行,可能的原因有哪些?/ |+ U# c1 m: v5 t5 Y) A# J
可能的原因包括供电问题(如VCC电压偏离正常范围)、晶振问题(如晶振损坏或未起振)、RESET引脚电平逻辑错误(如一直处于复位状态)、程序下载或擦除问题(如flash无法下载或损坏)以及控制程序问题(如程序存在bug)。
$ d2 J$ T" Y* q+ G! U" x: u6 N" l: c6 }0 W9 y$ F( }; r% ]" c
2、看门狗定时器的作用?" |3 c3 a7 T" F4 |9 o" e- w
看门狗定时器(Watchdog Timer)在嵌入式系统中用于监控和重置系统,以防止因软件故障导致的系统崩溃。它通过定时检查系统是否正常运行,并在超时后触发系统重置,从而提高系统的可靠性和稳定性。1 Q% J: `, i; V0 P

7 z# M! f5 b% y! j$ n& J0 e" J* f3、单片机中断处理流程是怎样的?1 ~) B+ S9 b- ?4 C8 W9 @
单片机中断处理流程通常包括三个步骤:中断响应、中断处理和中断返回。
. G2 p) O' d( K- S8 F$ c4 I当中断发生时,中断系统通过硬件自动生成长调用指令(LACLL),将断点地址压入堆栈保护,并将对应的中断入口地址装入程序计数器PC,使程序转向该中断入口地址执行中断服务程序。中断服务程序完成后,计算机通过中断返回指令RE将断点地址从堆栈中弹出,返回到程序计数器PC,并通知中断系统已完成中断处理。6 {- ]% c" L. |
4 W9 A1 S3 _3 ?1 x5 {/ E6 s: D. E
4、解释一下进程、线程、协程的概念6 j3 V) t5 r3 m. R  e, j$ x
进程:进程是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。/ {8 E  B/ L, v; k
: q1 |/ v4 W# L2 ?
线程:线程是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。2 y1 X0 O+ B( r  O
' T9 ^& R2 h; c) F( S# i
协程:是一种比线程更加轻量级的存在。一个线程也可以拥有多个协程。其执行过程更类似于子例程,或者说不带返回值的函数调用。5 Z2 }# B% p7 B; ^

wwszqs4mczi64095463034.jpg

wwszqs4mczi64095463034.jpg

) ?) {  H# r% J* |  r5、什么是嵌入式系统?* i, U# \- n( M/ w( {( Z0 f4 V* Z" q! i; `
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。它适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的场合。嵌入式系统通常由处理器、存储器、输入输出设备、软件等组成,具有体积小、功耗低、可靠性高、功能专用等特点。
- P' X5 f* s2 q
* ], i; @1 ^- |- m5 t. \" y6、C语言中堆和栈的区别是什么?" m7 {# k# A% s" o* z) g
堆和栈是C语言中用于存储数据的两种不同区域。栈由系统自动分配和管理,通常用于存储局部变量和函数调用时的临时数据;而堆需要程序员自己申请和释放,通常用于存储动态分配的数据。两者在存储内容、管理方式、空间大小、能否产生碎片、生长方向、分配方式和分配效率等方面都存在差异。
1 h0 P! G5 u* C* R+ ~
$ E+ p9 f" z" P) [7、请简单说下嵌入式系统中的RTOS调度策略
" @4 a- T& K: ~8 ]. IRTOS(实时操作系统)的调度策略包括基于优先级的调度、轮询调度、时间片轮转调度等。这些策略直接影响系统的实时性和效率,确保任务能够按照预定要求得到执行。! u3 z; z6 J  g8 }1 ]8 H1 I* b

1 t1 _- f. P4 ]4 k1 K8、你如何保证单片机代码的质量和可靠性?
$ M6 D" p3 ~& R- T( T$ E0 w在单片机项目中,我通常会采取以下措施来保证代码的质量和可靠性:首先,我会对代码进行严格的测试和验证,包括单元测试、集成测试和系统测试等;其次,我会遵循良好的编程规范和代码风格,以提高代码的可读性和可维护性;最后,我会定期回顾和更新代码,以消除潜在的错误和漏洞。
2 l8 r# X5 X/ M" Y
" Q" D' r1 ]4 K* ]/ e( p$ x& T- u9、程序的局部变量、全局变量和动态申请数据分别存在于哪里?3 B* S  Y. \' d9 L5 ?/ _
局部变量存在于栈区。全局变量存在于静态区(数据段)。动态申请的数据存在于堆区。; R; N  {' B9 w/ E: V$ L4 |
10、在C语言中,如何实现链表?请举例说明。( h, u2 W2 O2 C" f8 |( A& i& S* t# v5 a* v
链表是一种动态数据结构,由节点组成,每个节点包含数据部分和指向下一个节点的指针。
% z4 Y/ L& j* V* }  u  g/ N$ D  @在C语言中,可以通过结构体和指针来实现链表。例如,单链表的节点可以定义为:) V8 k7 V! o5 h! x8 z3 h: s4 K
  • struct Node {    int data;    struct Node* next;};6 \5 T/ ~9 e. t9 |& E' F
    然后通过动态分配内存和设置指针来构建链表。例如,创建一个新的节点并插入到链表的开头:+ s0 C% ?  I) P4 }
  • struct Node* head = NULL;struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = 10;newNode->next = head;head = newNode;% p. T* H/ {9 `- Z0 D9 F
    由于篇幅有限,今天就分享这些,其实还有很多很多,大家面试之前,尽量先刷一波面试题。
    " z/ K7 c7 N$ C* J7 o( u  K0 p" a( x# M0 v0 c9 R! ^& {% A
    作者 | strongerHuang7 x! V) Z  n" M$ Q1 o& k$ t
    微信公众号 | strongerHuang! W2 ~- v& N% J  M
    -END-
    + v# R+ D8 e. [1 G  X  S往期推荐:点击图片即可跳转阅读4 N, {; z. ]6 M4 @/ l4 ?
                                                           
    + Q. W- r+ S7 f8 s! G# v! i                                                                7 L# w( y2 w. o" K7 @0 l
                                                                           
    + p! ~# y+ P- ^9 f7 |& j4 S  x& e                                                                               
    . f4 u0 N$ U" M0 {4 q

    zixvifsym0564095463134.jpg

    zixvifsym0564095463134.jpg
    9 s9 M! X; p# ~) Q6 X5 I! Z
                                                                                    ' A& v( w# e/ A+ Q3 y1 K
                                                                                            硬件都做出来了,客户说想改一下,结果,全部推倒重做!- l/ t+ D7 b6 u
                                                            # x2 G/ C7 z* ?3 z# e5 z0 V+ R$ R0 l* V
                                                                   
    3 n* `! j4 u+ z4 z. s* D" o                                                                        # q3 g4 v5 b6 m% U" S
                                                                                    ! S+ P, w) o) b3 i' ]- Y5 ]& |' F$ b

    tw04f5t5stg64095463234.jpg

    tw04f5t5stg64095463234.jpg
    2 m$ c5 z4 W! _0 b
                                                                                    . l; H: h# @( C( U: L9 a
                                                                                            嵌入式架构设计,浅谈"驱动分离式"设计思想。$ B- S; L, t6 A8 Q
                                                                    $ ~( L3 P' @  F3 Z/ B) N. r! {# i
                                                                            6 r% {% m8 S& S& r6 }  q/ {
                                                                                    2 S5 m  e; t4 v( C& b6 p: e9 n

    3zkpel5jkn464095463334.jpg

    3zkpel5jkn464095463334.jpg

    - U: ^, V8 K1 W4 K                                                                                # r+ t6 Q9 P) b' U+ E
                                                                                            分享一个跨平台通用的 GUI 框架!' |2 H7 f  y2 V( R) s* s+ v# F2 B
                                                                                   
    0 F8 r, S+ z! j3 w                                                                        & ^% L/ h3 J5 a+ P: l5 Z
                                                                   
    + U7 d% b9 g7 H$ E; @1 P; z. B4 C                                                        我是老温,一名热爱学习的嵌入式工程师( I) h% e; V! }5 U; U/ U! t, X
    关注我,一起变得更加优秀!
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表