| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 2022届嵌入式软件校招题(嵌入式基础知识) -> 正文阅读 |
|
[嵌入式]2022届嵌入式软件校招题(嵌入式基础知识) |
3.1 GPIO口一般有哪三个寄存器? 以S3C2410为例,有控制寄存器、数据寄存器、上拉寄存器。 3.2 GPIO的输入输出模式有哪些? 答案: (1)输入模式:浮空输入、带上拉输入、带下拉输入、模拟输入。 (2)输出模式:开漏输出、推挽输出、开漏复用输出、推挽复用输出。 解读:
3.3请说明总线接口UART、USB、SPI、IIC的异同点。
3.4什么是异步串行?什么是同步串行? (1)异步串行方式的特点: ①以字符为单位传送信息,相邻两个字符间的间隔是任意长;即字符内部各位同步,字符间异步; ②因为一个字符中的比特位长度有限,所以接收时钟和发送时钟只要相近就可以了。 (2)同步串行方式的特点: ①以数据块为单位传送信息,在一个数据块内,字符与字符之间无间隔;即字符内部各位同步,字符间也同步; ②因为一次传输的数据块中包含的数据较多,所以接收时钟与发送时钟需要严格同步。 3.5 IIC总线时序图? (1)时序总结:
(2)写数据步骤: ①主机发起一个启动信号(START)。 ②主机发送7bit从机地址+1bit读写选择位,1表示读、0表示写。 ③从机产生应答信号(ACK)。 ④主机发送8bit从机寄存器地址。 ⑤从机产生应答信号(ACK)。 ⑥主机发送一个字节数据。 ⑦从机产生应答信号(ACK)。 ⑧主机发送一个停止信号(STOP)。 (3)读数据步骤 ①主机发送一个启动信号(START)。 ②主机发送7bit从机地址+1bit读写选择位,1表示读、0表示写。 ③从机产生一个应答信号(ACK)。 ④主机发送8bit从机寄存器地址。 ⑤从机产生一个应答信号。 ⑥主机再次发送一个启动信号(START)。 ⑦主机再次发送7bit从机地址+1bit读写选择位,1表示读、0表示写。 ⑧从机产生一个应答信号(START)。 ⑨主机读取一个字节数据。 ⑩主机产生一个非应答信号(NACK)。之后产生一个停止信号(STOP)。 3.6 SPI的四种操作时序分别是什么? SPI的时钟极性CPOL和时钟相位CPHA可以分别为0或1,由此构成了四种组合: ①CPOL = 0,CPHA = 0:空闲时SCLK为低电平,在第一个边沿开始采样。 ②CPOL = 0,CPHA = 1:空闲时SCLK为低电平,在第二个边沿开始采样。 ③CPOL = 1,CPHA = 0:空闲时SCLK为高电平,在第一个边沿开始采样。 ④CPOL = 1,CPHA = 1:空闲时SCLK为高电平,在第二个边沿开始采样。 3.7哪种总线方式是全双工类型?哪种总线方式的传输距离较短? (1)UART、SPI是全双工类型。 (2)IIC、USB的传输距离较短。 3.8编写一个通用型串口接收程序,如何实现判断未知设备的端口号和波特率? (1)判断端口号:首先搜索计算机可用端口,然后逐个打开,分别定时1.5秒,有数据进来则认为是目标端口。 (2)波特率判断:将本机波特率分别设置为2400、4800、9600、19200、38600、57600、115200,每个波特率定时1.5秒,对收到的ASCII码进行分析,将小于等于127的认为是正常的字符,将大于127的认为是乱码,当正常字符数目大于等于10倍乱码数目则认为当前波特率为正确波特率,并终止往后搜索。另外,也可以通过示波器判断。 3.9串口如何发送浮点型数据? 可将多字节的浮点型数据分解成单字节逐个发送,接收后组合还原。 (1)使用共用体来分解
(2)发送时发送4字节(小端模式,低位先发)
(3)接收端也定义同样的结构体,并接收4字节数据
(4)最后data_RX.f == data_TX.f。 3.10 UART和TTL、RS-232、RS-485的关系? 答案: (1)UART是一种具有协议特征的收发器/接口/总线,也就是说它是一个按照特定协议来收发数据的硬件,它规定了数据按照什么格式和时序来传输。 (2)而TTL、RS-232、RS-485是三种不同的电气协议,是对电气特性的规定,作用于数据传输通路,但它并不包含对数据的处理方式。UART可以使用TTL电平,也可以使用RS-232、RS-485电平。 解读:三种电气协议的区别:
3.11 RS-232与RS-485的区别和联系? (1)区别: ①抗干扰性:RS-485接口的抗干扰性比RS-232接口强,因为RS-485采用差分传输。 ②传输距离:RS-485接口(1200m)的传输距离比RS-232接口(50m)远。 ③通信能力:RS485接口在总线上允许连接多达128个收发器,而RS-232接口只允许一对一通信。 ④传输速率:RS-485接口的最高传输速率为10Mbps,而RS-232接口为20Kbps。 ⑤信号线:RS-485接口组成半双工网络需要两根信号线,组成全双工网络需要四根信号线;RS-232接口一般使用RXD、TXD、GND三根线组成全双工网络。 ⑥电气电平值:RS-485接口规定A线电平比B线电平高200mV以上时为逻辑“1”,A线电平比B线电平低200mV以上时为逻辑“0”。RS-232接口规定-5V ~ -15V等于逻辑“1”,+5V ~ + 15V为逻辑“0”,噪声容限为2V。 (2)联系: ①都可通过DB-9连接器连接。 ②均可采用屏蔽双绞线传输。 ③都是串行通信。 ④通信方式都是全双工(一般RS-485是半双工)。 3.12 uart如何保证数据传输的正确性? (1)在数据位的两端添加了起始位、奇偶校验位、停止位等用于数据的同步和纠错。 (2)在接收端用16倍波特率对数据进行采样,取中间的采样值,很大程度上确保了采样数据的正确性。 3.13保证数据无串扰,参数设置正确,但是串口A传输float类型给串口B,总是出现错误,请问可能是什么原因? 可能是发送端和接收端的大小端不一致。 3.14什么是MSB,什么是LSB? (1)MSB(Most Significant Bit):最高有效位,是指二进制中最高值的比特。 (2)LSB(Least Significant Bit):最低有效位,是指二进制中最低值的比特。 3.15 UART一帧可以传5/6/7/8位,IIC必须是8位,SPI可以8/16位。 3.16请列举常用的串行通信方式(两种以上),并简述串行通信和并行通信不同之处、优缺????点。 (1)异步通信(UART)和同步通信(SPI、IIC、USB等)。 (2)串行速度慢但占用资源少、线间干扰小;并行速度快但占用资源多、线间干扰相对大。 3.17 CAN总线接口相对于RS-232接口、RS-485接口的优点是什么? (1)CAN总线接口相对于RS-232接口的优点是抗干扰能力强、传输距离远。它采用差分传输,内置CRC校验,传输可靠性强。 (2)CAN总线接口相对于RS-485接口的优点是能构成多主系统,同一时刻可以有两个或两个以上的设备处于发送状态,适用于实时性要求高的工控领域。 1.进程&线程(16道)1.1异步IO和同步IO区别? 答案:如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完。相反,异步IO操作在后台运行,IO操作和应用程序可以同时运行,提高系统性能,提高IO流量。 解读:在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行。而异步文件IO中,线程发送一个IO请求到内核,然后继续处理其他事情,内核完成IO请求后,将会通知线程IO操作完成了。
1.3进程的地址空间模型?
1.4进程的五种状态分别是? (1)就绪态:所有运行条件已就绪,只要得到了CPU时间就可运行。 (2)运行态:得到CPU时间正在运行。 (3)僵尸态:进程已经结束了但父进程还没来得及回收。 (4)等待态:包括浅度睡眠跟深度睡眠。进程在等待某种条件,条件成熟后即进入就绪态。浅度睡眠时进程可以被信号唤醒,但深度睡眠时必须等到条件成熟后才能结束睡眠状态。 (5)暂停态:暂时停止参与CPU调度(即使条件成熟),可以恢复。 1.5子进程从父进程继承的资源有哪些? 答案:子进程继承父进程的绝大部分资源,包括堆栈、内存、用户号和组号、打开的文件描述符、当前工作目录、根目录。 注意:子进程独有进程号、不同的父进程号、自己的文件描述符。 1.6什么是进程上下文、中断上下文? (1)进程上文:是指进程由用户态切换到内核态时需要保存用户态时CPU寄存器中的值,进程状态以及堆栈上的内容。即保存当前进程的状态,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 (2)进程下文:是指切换到内核态后执行的程序,即进程运行在内核空间的部分。 (3)中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。中断上文可以看作硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被中断的进程环境)。 (4)中断下文:执行在内核空间的中断服务程序。 1.7如何防止僵尸进程过多导致系统空间爆满? 答案:每当子进程退出,父进程都会收到SIGCHLD信号,故可在父进程中设置SIGCHLD信号的捕获函数,在捕获函数中回收子进程。
解读: (1)僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。 (2)可用top命令查看僵尸进程的数量(zombie),也可用ps -aux | grep Z(僵尸进程的状态显示为Z)来查看僵尸进程的PID等信息。 1.8 /proc目录下,以数字命名的目录表示什么? 以数字命名的目录表示当前一个运行的进程,目录名即为进程PID,其内的目录和文件给出了一些关于该进程的信息。 1.9进程和线程有什么区别? (1)进程是系统中程序执行和资源分配的基本单位,线程是CPU调度的基本单位。 (2)一个进程个拥有多个线程,线程可以访问其所属进程地址空间和系统资源(数据段、已经打开的文件、I/O设备等),同时也拥有自己的堆栈。 (3)同一进程中的多个线程可以共享同一地址空间,因此它们之间的通信实现也比较简单,而且切换开销小、创建和消亡的开销也小。而进程间的通信则比较麻烦,而且进程切换开销、进程创建和消亡的开销也比较大。 1.10什么时候用多进程?什么时候用多线程? (1)当程序的安全性、稳定性要求较高时用多进程。 (2)需要频繁通信/切换程序/创建跟销毁程序时用多线程。 1.11线程可以独立运行吗?一个线程崩溃会导致整个进程崩溃吗? 答案:线程不能独立运行,但一个线程崩溃不一定导致整个进程崩溃。 解读: (1)线程属于进程,线程的运行需要依赖进程的地址空间和系统资源。 (2)线程崩溃的本质就是内存出错,若出错的内存没有被其他线程访问,则不会导致其他线程出错,也就不会导致进程崩溃。 1.12写出下列线程、互斥锁、信号量相关代码。
1.13线程间通信和同步方式有哪些? 信号、信号量、互斥锁、条件变量、自旋锁、读写锁。 1.14如何防止同时产生大量的线程? (1)方法是使用线程池。 (2)线程池可以提高调度效率和限制资源使用,线程池中的线程达到最大数时,其他线程就会排队等候。 1.15互斥锁与信号量的区别? (1)信号量用于线程同步,互斥锁用于线程互斥。 (2)信号量可以为非负整数,可以实现多个同类资源的多线程同步;互斥锁只能为0/1,只能用于一个资源的互斥访问。 (3)信号量可以由一个线程释放,另一个线程得到;互斥锁的加锁和解锁必须由同一线程分别对应使用,且多个线程使用多个互斥锁必须注意统一顺序,否则可能造成死锁。 1.16孤儿进程是什么? (1)父进程先于子进程结束,此时子进程成为一个孤儿进程。 (2)Linux系统规定:所有孤儿进程都成为一个特殊进程(进程1,也就是init进程)的子进程。. 如果感觉写的还可以 但是还想再学一点点 可以去看这个专栏 (本文的出处是专栏的C语言专栏 总结出的高频考题(侵权联系删除即可)) 1. 专刊及作者介绍_牛客博客(嫌贵的再刷一些算法题和arm架构的知识即可) |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:20:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |