根据面经准备面试第六期-2026嵌入式软开-cvte
作者:zzck链接:https://www.nowcoder.com/feed/main/detail/47a8cb3cd267449ca888d575a0ad44bd?sourceSSR=search1.自我介绍
2.#include<>和#include“”区别
3.#define 和const有何区别,各自优势
4.指针,用过二级指针吗
5.常见协议,UART iic spi can讲解和相互的优点
6.单片机gpio模式几种,介绍一种模式
7.单片机开漏输出用过吗,用在哪里,介绍一下
8.介绍项目
9.sizeof和strlen介绍
10.讲一下函数调用过程
2.#include<>和#include“”区别
- #include<>:用于包含系统头文件,编译器在标准系统路径(如/usr/include)中查找文件。
- #include"":用于包含用户自定义头文件,编译器首先在当前目录(或编译时指定的包含路径)中查找,如果找不到,再按系统路径查找。
3.#define 和const有何区别,各自优势
#define预处理指令、进行简单文本替换、不占内存
优势:可用于定义常量、宏函数、条件编译、灵活性高
缺点、不进行类型检查、可能产生副作用
const:修饰变量,表示只读,占内存(存储在,只读段),有类型检查
优势:类型安全,可调试,避免宏的可能错误
缺点,可能用于条件编译,不能定义宏函数
适合定义有类型的常量,能避免类型不匹配错误,可用于数组长度定义
4.指针,用过二级指针吗
一级指针,指向变量的地址,指针是存储变量地址的变量,通过可间接访问或修改变量的值,是c语言的特性(如动态内存分配、函数传地址修改参数
二级指针,指向指针的地址,常用于动态二维数组,函数中修改指针的值等,即存储指针变量的地址
int a = 10; int *p = &a; // 一级指针:p存储a的地址 int **pp = &p; // 二级指针:pp存储p的地址
5.常见协议,UART iic spi can讲解和相互的优点
uart、2线,tx、rx、异步通信、无时钟线、靠波特率同步、硬件简单、成本低,如串口调试
iic、2线、sda数据线、scl时钟线、同步通信、主设备提供时钟、支持多主多从、传感器、eeprom
spi、4线、mosi、miso、sclk、cs同步通信、主设备控制时钟和片选、cs1、cs2、高速全双工、抗干扰强、适合短距离高速传输、显示屏、flash、adc
can(2线,差分信号)多主通信(总线仲裁机制、抗干扰极强
6.单片机gpio模式几种,介绍一种模式
GPIO(通用输入输出)是单片机与外部设备交互的引脚,常见模式(以 STM32 为例)包括:
- 输入模式:浮空输入、上拉输入、下拉输入、模拟输入;
- 输出模式:推挽输出、开漏输出;
- 复用功能模式:将 GPIO 复用为外设功能(如 UART 的 TX/RX、SPI 的 MOSI)。
举例:推挽输出
- 原理:输出级由两个 MOS 管组成(P 沟道和 N 沟道),当输出高电平时,P 沟道导通、N 沟道关闭,直接输出高电平(通常等于电源电压);输出低电平时则相反。
- 特点:能直接驱动外部设备(如 LED、继电器),输出电流较大(一般可达几 mA 到几十 mA),且高低电平驱动能力对称。
- 应用:常用于需要强驱动能力的场景,如控制 LED 亮灭、驱动小型电机。
7.单片机开漏输出用过吗,用在哪里,介绍一下
开漏输出是gpio模式的一种,需外部上拉电阻才能输出高电平
8.介绍项目
9.sizeof和strlen介绍
sizeof运算符、计算变量/类型占用的内存字节数、可接收变量、类型,包括数组、结构体
strlen运算符、计算'\0'之前的字符个数,仅接受以'\0'之前的字符个数,char,仅仅c风格字符串,abc的strlen为3
10.讲一下函数调用过程
函数调用是程序执行流程跳转的过程、底层通过栈实现,
参数压栈,将函数实参从右到左依次压入栈中
返回地址压栈,将当前代码执行的下一条指令地址压栈,供函数执行完返回
栈帧切换,保存当前栈基地址到栈中
将栈顶指针的值赋给ebp,建立新的栈帧(函数的局部变量将在新栈帧中分配)
执行函数体:为局部变量分配栈空间,执行函数内代码
函数返回,释放局部变量空间
从栈中恢复调用的ebp,恢复原栈帧
弹出返回地址、跳转到该地址执行源程序
#秋招#