嵌入式软件工程师面试题——嵌入式专题 (五十七)

本文主要是介绍嵌入式软件工程师面试题——嵌入式专题 (五十七),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明:

  • 面试群,群号: 228447240
  • 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
  • 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
  • 博主与大家一起学习,一起刷题,共同进步;
  • 写文不易,麻烦给个三连!!!

1.MQTT通信过程

答案:

1.创建客户端

2.指定IP地址和端口号

3.进行连接

4.发布主题或订阅主题

5.数据传输

6.断开连接

2.单片机最小系统?内部主要结构?

答案:

电源,晶振,复位电路;

内部结构:ROM/RAM,计时器,中断,I/O串并行口,总线

3.看门狗原理

答案:

在系统运行以后就启动看门狗计时器,此时看门狗就开始自动计时,如果达到一定时间还不去清零,看门狗就会溢出从而引起看门狗中断,造成系统复位。

4.STM32如何进入中断

答案:

STM32是一款嵌入式芯片,中断是其常用的一种工作模式。进入中断可以通过如下步骤实现:

配置中断向量表:中断向量表是一段存储中断向量地址的内存空间,需要在程序初始化时配置。可以通过修改VTOR (VectorTable Offset Register)寄存器来设置中断向量表的起始地址。配置中断控制器:STM32芯片的中断控制器包括NVIC (NestedVectored lnterrupt Controller)和EXTI (External lnterrupt)。NVIC用于处理内部中断,EXTI用于处理外部中断。可以通过配置NVIC或EXTI相关寄存器来使能、禁止或配置中断优先级。

定义中断服务程序:在程序中定义中断服务程序,当中断发生时会跳转到相应的中断服务程序执行。中断服务程序需要按照一定的规范编写,包括入口地址、退出方式等。

触发中断:在程序中触发中断,可以通过软件触发或硬件触发。软件触发可以通过NVIC相关寄存器进行设置,硬件触发可以通过外部信号触发EXTI中断。

5.Linux中中断的实现机制,tasklet与workqueue的区别及底层实现区别?为什么要区分上半部和下半部

答案:

(1)Linux中断分为硬件中断和内部中断(异常),调用过程:外部中断产生->发送中断信号到中断控制器->通知处理器产生中断的中断号,让其进一步处理。即处理器收到来自中断控制器的中断处理请求,保存中断上下文,跳转到中断对应的处理处,(快速完成中断中断上半部,中断上半部返回后执行中断下半部),中断处理函数返回时恢复现场。

(2)tasklet和workqueue,两者都是中断下半部的一种实现方法。区别在于tasklet属于中断上下文,支持smp、不可睡眠和阻塞;workqueue基于线程的封装,属于进程上下文,因此支持睡眠、阻塞。

(3)为了能够在中断处理过程中被新的中断打断,将中断处理程序一分为二,上半部登记新的中断,快速处理简单的任务,剩余复杂耗时的处理留给下半部处理。下半部处理过程中可以被中断,上半部处理时不可被中断。

6./dev/下面的设备文件是怎么创建出来的?

答案:

有三种方式:devfs机制、udev机制、手动创建设备节点。

devfs机制,从来没用过,应该是2.6以前的内核使用的;

udev机制,其实就是现在常用的device_create()、class_create()这一套接口,所谓udev是上层用户空间程序,是基于驱动中创建使用了这两个接口而起作用的,但是udev在日常开发中几乎接触不到,我们只需在驱动中调用创建节点的这两个API就ok了,剩下的工作就交给udev去做。

mknod ,新手最常用的一种创建设备节点方法,但并非入门后就再没有用途。在某些情境下,或许有人不想使用udev机制,于是把节点创建工作写在脚本里,这样也是无可厚非的

7.insmod一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?

答案:

分别会执行module_init()、module_exit()指定的init函数和exit函数。

要注意的就是尽量使在init函数中出现的资源申请及使用有对应的释放操作在exit中,init申请,eixt释放。

卸载出现的异常?那很稀松平常了,大多数都是资源使用完没释放,但是模块却卸载了。

8.内核中申请内存有哪几个函数?有什么区别?

答案:

常见的三个接口,kmalloc(),vmalloc(),__get_free_pages()。

kmalloc()操作的空间位于直接映射区(即4G空间中的896M区域),申请到空间物理地址多为连续地址,常用于操作频繁的数据结构,连续地址利于提高访问效率。

对于一些操作不频繁的数据结构可以用vmalloc()申请内存,vmalloc()操作的空间优先选择高端内存,这里申请出的内存物理地址往往不是连续的,所以访问效率不会很高。

__get_free_pages()操作的区域跟kmalloc()相同,位于直接映射区,不同的是它申请的是物理页的整倍数大小的内存。

9.驱动中操作物理绝对地址为什么要先ioremap?

答案:

ioremp是内核中用来将外设寄存器物理地址映射到主存上去的接口,即将io地址空间映射到虚拟地址空间上去,便于操作。为什么非要映射呢,因为保护模式下的cpu只认虚拟地址,不认物理地址,给它物理地址它并不帮你做事,所以你要操作外设上的寄存器必须先映射到虚拟内存空间,拿着虚拟地址去跟cpu对接,从而操作寄存器。

10.设备驱动模型三个重要成员是?platform总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?

答案:

(1)总线,设备,驱动。

(2)匹配规则:当有一个新的设备挂起时,总线被唤醒,match函数被调用,用device名字去跟本总线下的所有驱动名字去比较,相反就是用驱动的名字去device链表中和所有device的名字比较。如果匹配上,才会调用驱动中的probe函数,否则不调用。

(3)至于先后顺序,鉴于个人理解,不会有影响,不管谁先谁后,bus都会完成匹配工作。

(4)谈谈对Linux设备驱动模型的认识:设备驱动模型的出现主要有三个好处

设备与驱动分离,驱动可移植性增强;

设备驱动抽象结构以总线结构表示,看起来更加清晰明,谁是属于哪一条bus的;

最后,设备与驱动分离,很好的奠定了热插拔机制。

这篇关于嵌入式软件工程师面试题——嵌入式专题 (五十七)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690567

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础