嵌入式实战场景题目(一)
此部分不只包含面经内容,均是实战类型不必全文背诵,有思路即可
后续收录于专栏:嵌入式最强面经
1.我们通常所说的波特率9600bps,这个bps的意思是?
简答:
波特率(baud rate)是衡量数据传输速率的单位,通常以每秒传输的比特数来表示。在串行通信中,发送端和接收端必须保持相同的波特率设置,以确保正确传输数据。如果发送端和接收端使用不同的波特率设置,那么数据传输会出现问题。如果发送端使用9600 bps的波特率,而接收端使用不同的波特率,例如4800 bps,那么接收端可能无法正确解析发送端发送的数据。这会导致数据传输错误、乱码和通信障碍。
2.SPI IIC UART那个属于异步通信 那个属于同步通信?
同步? 异步?
最简单的分辨方式就是有无时钟线,(有时钟线就可以同步,没有就异步,很显然UART没有但是USART可以有时钟线。)
当然这是大多数情况下可以这么理解,特殊情况下没有时钟线也可以实现同步
1.UART(异步):UART使用起始位、数据位、校验位和停止位的组合来表示一个字符的传输。通信双方使用自己的时钟源,没有共享的时钟信号,因此是异步通信。
2.SPI(同步):SPI使用主从模式进行通信,主设备提供时钟信号来同步数据传输。通信双方在时钟的控制下进行数据的传输,因此是同步通信。
3.IIC(同步):IIC也称为I2C,使用主从模式进行通信,时钟线是由主设备提供的,从设备根据主设备的时钟信号进行数据传输,因此是同步通信。
3.单片机ADC是什么?主要功能?
ADC (Analog-to-Digital Converter)即模数转换器,是一种将模拟信号转换为数字信号的电子元件。在单片机系统中,ADC主要用于将模拟信号转换为数字信号,以便单片机能够进行数字信号处理。
单片机ADC的主要功能是将外部模拟信号转换为数字信号,这种模拟信号可以来自各种传感器、电位器、电压等。
通过ADC转换后的数字信号可以直接读到单片机内部,进行数字信号处理。ADC的转换精度决定了单片机可以获取到的数字信号的准确程度,因此,ADC的精度对系统的性能有着关键作用。
引出问题:ADC和DAC有什么区别?
ADC的工作原理:
ADC将模拟信号转换为数字信号。它的基本原理是将连续时间的模拟信号转换为离散时间的数字信号。具体来说,ADC将模拟信号在时间上进行采样,然后通过量化操作将每个采样值转换为数字编码。这些数字编码可以用二进制代码表示。ADC在转换过程中需要通过采样频率和量化精度来决定转换质量,采样频率和量化精度越高,转换质量越好,但同时也会增加转换的成本和复杂度。
DAC的工作原理:
DAC将数字信号转换为模拟信号。它的基本原理是将数字信号通过数字编码转换为模拟信号。具体来说,DAC将数字信号的二进制代码解码,并根据解码结果输出对应的模拟信号。DAC的输出模拟信号可以是连续的,也可以是分段的。DAC的输出质量取决于DAC的分辨率和更新速率,分辨率越高,更新速率越快,输出质量越好。
4.存储器 类型 FLASH和RAM的区别
FLASH
FLASH是一种非易失性存储器,即即使在断电情况下仍然可以保存其存储的数据。FLASH主要用于存储程序代码和常量数据,以及需要长期存储、或者经常更新的数据,例如配置信息。使用FLASH可以有效地减少系统启动时间和占用内存空间,同时也可以更好地保护程序数据的安全性。
FLASH的缺点是存储速度相对较慢,写入时需要整个擦除块的数据先清除,再进行数据写入,一般擦除操作时间比写操作时间长,对于需要频繁改变的数据不太适用。
RAM
RAM是一种易失性存储器,它可以快速读写数据,一般用于存储临时数据、变量、堆栈等运行时需要的数据。RAM有多种类型,包括静态RAM(SRAM)和动态RAM(DRAM)等。
SRAM速度快、功耗低,但容量相对较小,容易受到电磁干扰;DRAM容量大,但需要刷新,读写速度较慢。RAM相比FLASH,读取速度更快,但在断电时会丢失数据,不适合存储长期数据。
总的来说,FLASH主要用于存储程序代码和常量数据,RAM主要用于存储临时数据和变量。选择存储器类型时要根据具体的应用需求来进行选择。
5.一般情况下,单片机定时器的相关寄存器有哪些?
1.TCON寄存器(定时器控制寄存器)
TCON寄存器用于控制定时器运行、中断触发等相关操作。
2.TMOD寄存器(定时器/计数器模式控制寄存器)
TMOD寄存器用于设定定时器的工作模式,以确定定时器的计数方式和中断触发条件。
3.TH0、TL0、TH1、TL1寄存器(定时器计数初值与重载值寄存器)
这四个寄存器均为8位寄存器,用于保存定时器的计数初值和重载值。通常情况下,定时器正常计数时由THx和TLx两个寄存器共同组成一个16位定时器计数器,当计数器溢出后,自动将THx和TLx值重载。其中,TH0和TL0寄存器
对应定时器0,TH1和TL1寄存器对应定时器1。
4.IE寄存器(中断使能寄存器)
IE寄存器用于开启或关闭各种中断。对于定时器中断,需要设置相应的中断标志位。
6.嵌入式存储区域(ARM MDK 环境下内存分布情况)
CODE(或ROM):代码存储区域,通常指的是嵌入式系统中的只读存储器(ROM)或闪存(Flash)等。这是用于存储程序的指令代码的区域。
RO(Read-Only):只读存储区域,用于存储只读的常量数据,如字符串、常量数组等。这些数据可以被读取,但不能被修改。
RW(Read-Write):读写存储区域,用于存储可读写的数据,如全局变量、静态变量、堆内存等。这些数据可以被读取和写入,其值在程序执行期间可以被修改。
ZI(Zero Initialization):未初始化数据区域,用于存储未经初始化的全局变量或静态变量。这些变量在编译时分配内存区域,但不被初始化为特定的初值,默认值可能是0或空值。
例:
unsigned char a; unsigned char b[8] = {1, 2, 3, 4, 5, 6, 7, 8}; unsigned char c[16] = {0}; const unsigned char d[1] = {0xdd}; int main() { unsigned char e = 0xee; } a是在ZI区,b是RW区,c是ZI区,d是RO区,e是栈对吗 在这段代码中,变量的内存分配如下: unsigned char a; 是一个全局变量,它的存储类别是未初始化的数据段(BSS段)或者称为零初始化区(ZI区)。 unsigned char b[8] = {1, 2, 3, 4, 5, 6, 7, 8}; 是一个全局数组变量,它会被分配到可读写数据段(RW段)。 unsigned char c[16] = {0}; 是一个全局数组变量,它同样会被分配到零初始化区(ZI区)。 const unsigned char d[1] = {0xdd}; 是一个全局常量数组变量,它会被分配到只读数据段(RO段)。 unsigned char e = 0xee; 是在 main() 函数中声明的局部变量,它会被分配到栈区。
7.C 程序 地址相关试题
数组 int a[5]= 12345 如果a的地址为0x2000106c 如果 int *p = &(a[1]); p++ ; int m = *p++; 此时m是多少 p是多少?
根据给出的代码和信息:
- int a[5] = {1, 2, 3, 4, 5};:这里定义了一个包含5个元素的整型数组a,并初始化为{1, 2, 3, 4, 5}。
- int *p = &(a[1]);:这里定义了一个整型指针p,并将其指向数组a的第二个元素a[1],即2的地址。
- p++;:指针p的值增加1,所以它现在指向数组a的第三个元素a[2],即3的地址。
- int m = *p++;:这里有两个操作符,先是解引用操作符*,然后是后递增操作符++。首先,对指针p进行解引用操作,得到其指向的值,即a[2],即3。然后,指针p递增1,移动到下一个元素a[3]的地址。
- 所以,在这段代码执行后:
- m 的值为3,因为它存储了指针p解引用时的值。
- p 的值指向数组a的第四个元素a[3]的地址,即
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
BG双9,目前就职intel。打算把之前校招时做的笔记通过专栏发出来,本专栏适合于C/C++、嵌入式方向就业的同学,本篇面经总结数千篇面经的知识集合,实时更新全网最新的嵌入式/C++最新内容,囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,在我看来这些是求职者在面试中必须掌握的知识点。最后呢祝各位能找到自己合适的工作。