单片机常见经典面试题目总结

根据五年行业经验编写了从项目准备->简历和面试准备->公司选择注意事项 等等找工作必看内容都在合集里面,订阅后就可以观看所有内容:>https://www.nowcoder.com/creation/manager/columnDetail/0EpoRr

1. 单片机IO口开漏输出和推挽输出的区别

  • **开漏输出:**只能输出低电平,要输出高电平需通过上拉电阻实现,类似于三极管的集电极输出。
  • **推挽输出:**可输出低电平和高电平,能够直接驱动功耗较小的数字器件,具有较低的导通损耗和高效率,且提高了电路的负载能力和开关速度。

拓展:STM32的8种GPIO模式

  • 浮空输入:I/O电平不确定,由外部决定。
  • 上拉输入:悬空时电平保持高电平。
  • 下拉输入:悬空时电平保持低电平。
  • 模拟输入:输入模拟信号到片上外设模块。
  • 开漏输出:需要外部上拉或下拉电阻来决定电平。
  • 开漏复用输出:外设模块控制电平。
  • 推挽输出:由P-MOS和N-MOS控制电平。

2. 单片机定时器的作用和优势

  • **作用:**计数、延时、输入捕获、输出比较(如输出PWM)、产生中断等。
  • **优势:**无需CPU参与,精度高。

3. 同步通信和异步通信的区别

  • **同步通信:**发送和接收需要相同的时钟频率,按帧发送数据。
  • **异步通信:**无需保持相同时钟,起始位和结束位用于判断数据到达。

4. 什么是中断?

当CPU正在执行程序时,因外部或内部事件使得CPU暂停当前工作,去执行中断服务程序。执行完毕后,恢复现场并继续执行原程序。

中断过程:

  1. 保护现场,将PC地址压栈。
  2. 执行中断服务程序。
  3. 恢复现场,将PC从栈中取回。
  4. 继续执行被中断的指令。

5. SPI、IIC、UART接口的区别及数据收发方式

  • **SPI(全双工,四线):**速度快,但无流控和应答机制。通过MISO、MOSI、SCLK、CS线进行通信。
  • **IIC(半双工,两线):**简单,支持多主控,速度较慢。通过SDA和SCL线通信。
  • **UART(全双工,两线):**无需时钟,传输距离远,有检错机制。通过RX和TX进行通信。

6. 无线通信技术简介

  • **BLE(蓝牙):**近距离通信,频段为2.4GHz ISM频段,适用于短距离、低功耗场景。
  • **WIFI:**基于802.11b协议,频率为2.4GHz,速度可达11Mbps,覆盖范围约100米。
  • **NFC:**短距离通信,频率为13.56MHz,用于双向识别和连接。
  • **Zigbee:**低速、低功耗无线通信技术,支持复杂拓扑结构,使用2.4GHz频段。

7. MQTT、CoAP、HTTP三种协议的区别

  • **MQTT:**基于TCP协议,常用于物联网消息发布和订阅。
  • **CoAP:**基于UDP协议,适合低资源设备和低功耗网络。
  • **HTTP:**基于TCP协议,主要用于Web通信,传输开销较大。

8. TCP的三次握手和四次挥手过程

  • 三次握手:
    1. 客户端发送SYN请求,服务器返回SYN+ACK。
    2. 客户端发送确认包,建立连接。
  • 四次挥手:
    1. 客户端发送FIN请求,服务器ACK。
    2. 服务器处理完后发送FIN,客户端ACK,连接断开。

9. C语言:找到数组中最小值

int get_min(int* array, int n) {
    int min = array[0];
    for (int i = 1; i < n; i++) {
        if (array[i] < min) {
            min = array[i];
        }
    }
    return min;
}

10. 摩拜单车生产的多线程机制

工序A每5分钟生产一辆单车,工序B每1分钟检测一辆,检测失败需返回工序A重新生产。多线程机制可使用生产者-消费者模型最大化产能。

11. 关于指针的定义

  • 指向指针的指针,指向一个整型数: int **a;
  • 有10个指向整型数的指针数组: int *a[10];
  • 指向有10个整型数数组的指针: int (*a)[10];
#嵌入式#

嵌入式就业指南 零基础开始-备战-&gt;题目-&gt;技巧

全部评论
1 回复 分享
发布于 10-12 14:39 河北
友友们,有什么想看的内容,欢迎评论留言,您的点赞是我创作的不竭动力。
1 回复 分享
发布于 10-12 14:44 河北

相关推荐

狂狂虎:项目经历感觉太着重描写技术了,完全不知道你的项目实际干的是什么,也不知道你在项目中完成哪一块。
点赞 评论 收藏
分享
12-10 12:19
门头沟学院 Java
点赞 评论 收藏
分享
&nbsp;CPU、寄存器、缓存、内存概述-&nbsp;CPU:中央处理器,执行指令的核心组件。-&nbsp;寄存器:CPU内部的临时存储空间,存放快速访问的数据。-&nbsp;缓存(Cache):在寄存器和内存之间的高速存储,分为三级(L1、L2、L3),速度和价格依次降低。-&nbsp;内存:主要存储程序和数据的地方。数据访问流程1.&nbsp;CPU首先在寄存器中查找数据。2.&nbsp;如果寄存器未命中,则检查缓存。3.&nbsp;如果缓存未命中,则从内存中获取数据。内存区域-&nbsp;栈区:&nbsp;&nbsp;-&nbsp;存放函数参数和局部变量。&nbsp;&nbsp;-&nbsp;由编译器自动分配和释放,效率高,但内存量有限(如iOS中为2M)。-&nbsp;堆区:&nbsp;&nbsp;-&nbsp;通过`new`、`malloc`等动态分配的内存。&nbsp;&nbsp;-&nbsp;需要程序员手动释放,可能导致内存泄漏。-&nbsp;静态区:&nbsp;&nbsp;-&nbsp;存放全局变量和静态变量。&nbsp;&nbsp;-&nbsp;程序结束时由系统释放。-&nbsp;常量区:&nbsp;&nbsp;-&nbsp;存放常量,不允许修改。&nbsp;&nbsp;-&nbsp;代码区:&nbsp;&nbsp;-&nbsp;存放函数体的二进制代码。类型说明符-&nbsp;基本类型:`void`、`char`、`short`、`int`、`long`、`signed`、`unsigned`、`float`、`double`、`struct`、`enum`、`union`。-&nbsp;存储类型:`extern`、`static`、`register`、`auto`、`typedef`。-&nbsp;类型限制符:`const`(只读)、`volatile`。变量理解-&nbsp;extern:指示变量在其他文件中定义。-&nbsp;static:&nbsp;&nbsp;-&nbsp;限制变量作用域。&nbsp;&nbsp;-&nbsp;局部变量存入静态存储区,延长生存周期。-&nbsp;register:将频繁使用的变量放入寄存器以提高效率。-&nbsp;auto:C语言默认存储类型。-&nbsp;typedef:给类型或变量表达式起别名。-&nbsp;const:只读变量。-&nbsp;volatile:&nbsp;&nbsp;-&nbsp;防止编译器优化。&nbsp;&nbsp;-&nbsp;适用于中断和多线程环境。C程序内存分配-&nbsp;堆、栈、静态存储区、文件分配区(常量字符串)、程序分配区(二进制代码)。&nbsp;sizeof与strlen-&nbsp;sizeof:关键字,返回类型或数组的字节大小。-&nbsp;strlen:计算字符串长度,直到遇到`\0`。&nbsp;函数参数传递-&nbsp;值传递、引用传递、指针传递、数组地址传递。Const、指针、基本类型组合的意义-&nbsp;const&nbsp;int&nbsp;x:只读变量。-&nbsp;const&nbsp;char&nbsp;*x:指向常量的指针,指针内容可变,指向内容不可变。-&nbsp;char&nbsp;*const&nbsp;x:常量指针,指针内容不可变,指向内容可变。-&nbsp;const&nbsp;char&nbsp;*const&nbsp;x:指针和内容均不可变。&nbsp;数组与指针-&nbsp;物理地址:内存单元的真实地址。-&nbsp;逻辑地址:CPU生成的地址。&nbsp;Linux进程间通信-&nbsp;管道(pipe)、信号量、消息队列、信号、共享内存、套接字。&nbsp;strcpy与memcpy区别-&nbsp;strcpy:复制字符串。-&nbsp;memcpy:复制指定长度的内存内容。&nbsp;内存泄漏与内存溢出-&nbsp;内存泄漏:未释放的内存,导致可用内存减少。-&nbsp;内存溢出:程序请求的内存大于可用内存。&nbsp;switch的变量类型限制-&nbsp;允许:整形、布尔、字符、枚举。-&nbsp;不允许:字符串等非基本类型。&nbsp;防止头文件重复调用-&nbsp;使用#ifndef和#pragma&nbsp;once。&nbsp;实时操作系统-&nbsp;示例:FreeRTOS、Ucos。&nbsp;指针数组与数组指针-&nbsp;指针数组:数组元素为指针。-&nbsp;数组指针:指向数组的指针。&nbsp;结构体自增与双重指针自增-&nbsp;自增从右向左进行。&nbsp;寄存器的使用-&nbsp;存储频繁调用的数据,减少内存访问。&nbsp;获取全局变量与局部变量地址(gdb)-&nbsp;使用backtrace或bt命令。&nbsp;进程中的同步与异步-&nbsp;同步:通过锁实现。-&nbsp;自旋锁:忙等待,不阻塞线程。-&nbsp;互斥锁:阻塞线程,等待资源释放。进程与线程的关系与区别-&nbsp;进程:资源分配的基本单位,包含一个或多个线程。-&nbsp;线程:进程中的执行单位,最小调度单位。树的遍历(递归与非递归)-&nbsp;中序遍历:左子树&nbsp;-&nbsp;根节点&nbsp;-&nbsp;右子树,利用堆栈进行进栈和出栈操作。剩余的大佬面经总结了&nbsp;&nbsp;链接在下边&nbsp;&nbsp;c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
5
23
分享
牛客网
牛客企业服务