拓展:
嵌入式工程师题库(适用于各大名厂笔试、软考、计算机等级考试)
第1题:下面代码片段中有哪些隐患或者错误?
回答:
1、调用get2(m)函数的时候,没有return,也不是全局变量,无法将new申请的内存地址传出,无法修改m的实际值;
2、调用m=get1()函数的时候,函数内定义的数组是局部变量,对应的内存在这个函数结束的时候就会被释放,因此return buf返回的地址是无效的,调用这样的地址造成严重错误;
3、调用memcpy(m,"aaa",3)函数,m为int类型指针,并不是指针数组,往一个没有权限的无效内存空间拷贝数据是非法的。
第2题:用变量a给出以下定义:
- 一个指向指针的指针,它指向的指针是指向一个整型数;
- 一个有10个指针的数组,该指针是指向一个整型数的;
- 一个指向有10个整型数数组的指针。
回答:
-
int **a;
-
int *a[
10];
-
int (*a)[
10];
第3题:简述SPI、IIC、UART接口的区别和各自收发数据的方法。
回答:
SPI:串行同步外设接口,全双工通信,SPI 是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机(处理器)产生,接收数据的外设(从设备)使用时钟来对串行比特流的接收进行同步化。可能会有许多芯片连到主机的同一个SPI接口上,这时主机通过触发从设备的片选输入引脚来选择接收数据的从设备,没有被选中的外设将不会参与SPI传输。
SPI主要使用4个信号:主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行SCLK或SCK和外设芯片(CS )。有些处理器有SPI接口专用的芯片选择,称为从机选择(SS)。
主机和外设都包含一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器是通过MOSI信号线将字节传送给外设,外设也将自己移位寄存器中的内容通过MISO信号线返回给主机,如下图所示。这样,两个移位寄存器中的内容就被交换了。外设的写操作和读操作是同步完成的,因此SPI成为一个很有效的协议。
IIC: 内部集成电路总线,半双工通信,只需要两条线:一串行数据SDA线和串行时钟SCL线,IIC总路线用两线来连接多支路总线中的多个设备。这种总线是双向、低速的,并与公共时钟同步。可以直接将一个设备接到IIC总线上或是从该总线上取下,而不会影响其他设备。
利用IIC接口在设备之间进行连接所使用的两根线是SDA (串行数据)和SCL (串行时钟),它们都是开漏(open-drain), 通过一个上拉电阻接到正电源,因此在不使用的时候任保持高电平,IIC总线在传送数据过程中共有3种类型信号,它们分别是开始信号、结束信号和应答信号,解析如下所示:
-
开始信号: SCL为高电平时,SDA 由高电平向低电平跳变,开始传送数据;
-
结束信号: SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据;
-
应答信号:接收数据的IC在接收到8位数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
发送方发出的每个字节都必须经过接收方确认,每个字节的第8个数据位一旦传送结束,发送方就释放数据线SDA。然后主机在SCL上产生一个额外的时钟脉冲,这会触发接收方通过将SDA置为低电平来表示对接收到的字节进行;如果接收方没能将SDA置为低电平,发送方就会中断传输,并且采取适当的错误处理措施。
UART: 通用异步收发传输器,全双工通信,异步式传输把每一个字符当作独立的信息来传送,并按照一固定且预定的时序传送,但在字符之间却取决于字符与字符的任意时序。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程,因此也称为异步串行通信。
拓展学习:详解RS232、RS485、RS422、串口和握手
第4题:从以下几种无线通信方式中选取一种了解的尽可能详细的描述一下:BLE,Wi-Fi ,NFC,NB-IoT,eMTC。
回答:
互联网上有很多解析,列举两例。
BLE:低功耗蓝牙,2.4GHz ISM频段,IEEE 802.15.1标准,它利用许多智能手段最大限度地降低功耗。蓝牙低能耗技术采用可变连接时间间隔,这个间隔根据具体应用可以设置为几毫秒到几秒不等。另外,因为BLE技术采用非常快速的连接方式,因此平时可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短的时间内关闭链路。BLE技术的工作模式非常适合用于从微型无线传感器(每半秒交换一次数据)或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常少(通常几个字节),而且发送次数也很少(例如每秒几次到每分钟一次,甚至更少)。
拓展:NB-IoT技术发展史漫谈、NB-IoT综合项目实战开发背景及平台
第5题:试描述MQTT、CoAP、HTTP三种协议的区别。
回答:
参见:物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)
第6题:试描述TCP建立和断开连接时的三次握手和四次挥手。
回答:
三次握手(Three-Way Handshake)即建立TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立,如下图所示:
- 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x;
- 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y;
- 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1。
四次挥手(Four-Way Wavehand)即终止TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开,如下图所示:
- 第一次:客户端请求断开FIN,seq=u
- 第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
- 第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
- 第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
第7题:一个无序的长度为n的数组,找到最小的值,请用C语言编码实现以下函数
-
int get_min(int* array, int n) {
-
-
}
回答(C语言编写):
-
int get_min(int* array, int n)
-
{
-
int i ;
-
int min =
array[
0];
-
for(i=
1; i<n; i++)
-
{
-
if(
array[i] < min)
-
min =
array[i];
-
}
-
return min;
-
}
第8题:工厂生产摩拜单车包含两道工序,工序A每5min生产一辆摩拜单车,生产完成后送到工序B检测,每1min检测一辆,检测失败的需要返回工序A重新生产;试用多线程(多任务)的机制实现上述的生产工序,实现产能的最大化。
回答:
由于时间原因,后续更新。
转载:https://blog.csdn.net/m0_38106923/article/details/104091034