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

说明:

  • 面试群,群号: 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.mzph.cn/news/673374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible自动化工具(1)

目录 ansible的特性:. 二.部署ansible 管理端安装 ansible: ansible 目录结构: 管理主机上配置主机清单: ​编辑 配置密钥对验证: ansible 命令行模块 : 1.command 模块 指定 ip 执行…

蓝桥杯-求阶乘-python

问题描述 满足N!的末尾恰好有K个0的最小的N是多少? 如果这样的N不存在输出一1。 思路解析 末尾的0是由10产生的,而10是由质数2和5产生的 在求阶乘的过程中,只要是偶数就会有2,而5相对2更少,所以对于10的数量我们可以…

P8647 [蓝桥杯 2017 省 AB] 分巧克力--2024蓝桥杯冲刺省一

知识点讲解&#xff1a;二分算法--模板及原理总结 思路&#xff1a;读完题发现答案的边长是具有二段性&#xff0c;单调性的。就是假如答案为ans&#xff0c;那么所有 <ans的值为【1&#xff0c;ans】都满足题意&#xff0c;那么我们就是寻找满足这个性质的最大值。 ans的…

MyBatis中#和$符的区别,sql注入问题,动态sql语句

MyBatis中#{}和${}的区别 #{}和${}都是MyBatis提供的sql参数替换。区别是&#xff1a;#{}是预编译处理&#xff0c;${}是字符串直接替换。#{}可以防止SQL注入&#xff0c;${}存在SQL注入的风险&#xff0c;例如 “ or 11”虽然存在SQL注入风险&#xff0c;但也有自己的适用场…

分享3款开源免费好用的Docker可视化管理工具安装部署教程

文章目录 1.前言2.Docker Desktop3.Portainer3.1 Portainer默认英文版本安装3.2 Portainer汉化版本安装3.3官方镜像说明3.3.1ssl访问3.3.2Nginx反代3.3.3Nginx反代设置子目录3.3.4docker-compose部署 3.4登录 4.DockerUI4.1简介4.2项目地址4.3部署启动命令4.4登录4.5首页 5.总结…

C语言数组与扫雷游戏实现(详解)

扫雷游戏的功能说明 使⽤控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格子默认随机布置10个雷可以排查雷 ◦ 如果位置不是雷,就显示周围有几个雷 ◦ 如果位置是雷,就炸死游戏结束 ◦ 把除10个雷之外的所有雷都找出来,排雷成功,游戏结…

【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

探讨:线程循环与激活(C++11)

关于并发程序的交互&#xff0c;办法挺多&#xff0c;但是既要快速响应又要节省CPU的没什么太好的现成策略。我这里提个思路&#xff0c;大家探讨探讨。 分析 死循环&#xff0c;响应速度够快&#xff0c;但是浪费CPU&#xff0c;每个循环加上一个sleep(0)或者yield()&#xf…

我的QQ编程学习群

欢迎大家加入我的QQ编程学习群。 群号:950365002 群里面有许多的大学生大佬&#xff0c;有编程上的疑惑可以随时问&#xff0c;也可以聊一些休闲的东西。 热烈欢迎大家加入&#xff01;&#xff01; 上限:150人。

Linux联网安装MySQL Server

yum安装 以下代码复制粘贴到控制台即可 yum list | grep mysql-server #查看可以下载的MySQLyum install -y mysql-server #安装MySQLmysql_secure_installation #引导安装 引导安装实例如下 systemctl enable mysqld 设置开机自动启动 systemctl sta…

Powershell Install 一键部署Openssl+certificate证书创建

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 Windows openssl 下载 前提条件 开启wmi,配置网卡,参考 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器…

代码随想录算法训练营|day28

第七章 回溯算法 93.复原IP地址78.子集90.子集II代码随想录文章详解 93.复原IP地址 ip地址有效需要满足&#xff1a;遍历完s&#xff0c;将其分为4段&#xff0c;每段数字有效性&#xff1a;范围在[0,255],且不含前导零 为避免重复取值&#xff0c;需要startIndex作为下次递归…

开源社区资源网站GitHub遭遇经济危机:GitHub员工警告当前模式不可持续,没有更多资金开源项目就有消亡的风险

在 State of Open Con 活动中&#xff0c;GitHub 的开源项目经理 Kara Sowles 警告称当前的开源资助方法“不可持续”。她指出&#xff0c;许多开源开发人员在没有报酬的情况下工作&#xff0c;这导致 58% 的开发人员考虑过停止参与开源项目&#xff0c;22% 的人已经退出。此外…

探讨CSDN等级制度:博客等级、原力等级、创作者等级

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

编辑器Zed

什么是Zed 官网&#xff1a;https://zed.dev/ Zed 是 Atom 编辑器原作者主导的新项目 —— 一款支持多人协作的代码编辑器&#xff0c;底层采用 Rust&#xff0c;且默认支持 Rust&#xff0c;还自带了 rust-analyzer&#xff0c;主打 “高性能”&#xff0c;颜值也十分在线&a…

GPT-3 训练自己的数据教程详解

安装依赖库&#xff1a; 确保你安装了必要的Python库&#xff0c;包括transformers、torch等。 pip install torch pip install transformers下载预训练模型&#xff1a; 从Hugging Face的模型库中下载GPT-2的预训练权重。 from transformers import GPT2Tokenizer, GPT2LMHe…

【MySQL】MySQL复合查询--多表查询/自连接/子查询

文章目录 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单行子查询4.2多行子查询4.3多列子查询4.4在from子句中使用子查询4.5合并查询4.5.1 union4.5.2 union all 1.基本查询回顾 表的内容如下&#xff1a; mysql> select * from emp; ----------------------------------…

生成函数性质速查表

摘要: 生成函数的性质 【对数据分析、人工智能、金融科技、风控服务感兴趣的同学&#xff0c;欢迎关注我哈&#xff0c;阅读更多原创文章】 我的网站&#xff1a;潮汐朝夕的生活实验室 我的公众号&#xff1a;潮汐朝夕 我的知乎&#xff1a;潮汐朝夕 我的github&#xff1a;Fen…

前端开发 :(二)HTML基础

1. 介绍HTML 1.1 HTML的定义和作用 HTML&#xff08;HyperText Markup Language&#xff09;是一种标记语言&#xff0c;用于创建和设计网页的结构和内容。它通过使用标签来描述文档的结构&#xff0c;使得浏览器能够正确地解释和显示页面。 1.2 HTML的发展历史 HTML的发展…

StringBuilder类常用方法(Java)

StringBuilder类常用方法 StringBuilder 是 Java 中常用的字符串缓冲区类&#xff0c;适用于频繁修改字符串的场景。 1. append(): 将指定字符串、字符、布尔值或其他数据类型的表示追加到字符串缓冲区的末尾。 StringBuilder sb new StringBuilder("Hello"); sb.…