嵌入式笔试面试刷题(day15)
文章目录
- 前言
- 一、Linux中的主设备号和次设备号
- 1.查看方法
- 2.主设备号和次设备号的作用
- 二、软件IIC和硬件IIC的区别
- 三、变量的声明和定义区别
- 四、static在C和C++中的区别
- 五、串口总线空闲时候的电平状态
- 总结
前言
本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟着我的脚步一起加油冲击大厂offer。
一、Linux中的主设备号和次设备号
1.查看方法
查看主设备号和次设备号方法:
首先先进入/dev目录:
cd /dev
使用下面命令查看:
ls -l
2.主设备号和次设备号的作用
每个设备驱动程序都会被分配一个唯一的主设备号,并根据需要使用不同的次设备号。
主设备号用于标识设备驱动程序所属的设备类型或设备类别。它是一个整数值,通常由系统管理员或开发者分配和维护。一些常见的主设备号分配给不同类型的设备,例如磁盘设备、网络设备、串口设备等。通过主设备号,系统可以识别特定类型的设备,并将设备的请求路由到适当的驱动程序。
次设备号用于标识同一类型的多个设备中的具体实例或设备编号。它也是一个整数值,由设备驱动程序或操作系统内核进行分配和管理。通过次设备号,系统可以区分不同的设备实例,每个设备实例都可以有不同的属性和状态。
主设备号和次设备号的组合可以唯一地标识系统中的每个设备。设备文件(例如 /dev/sda)和设备节点(例如 /dev/ttyUSB0)通常使用主设备号和次设备号来命名和表示设备。
在设备驱动程序中,主设备号和次设备号通常用于设备注册、设备文件的创建和管理、设备访问权限的控制等方面。通过这些标识符,操作系统和应用程序可以与设备驱动程序进行交互,发送请求和接收数据。
总之,主设备号和次设备号是用于唯一标识设备驱动程序和设备实例的参数,有助于操作系统管理设备和进行设备驱动程序的通信和操作。
设备类别相同的驱动程序主设备号相同,次设备号不同:
二、软件IIC和硬件IIC的区别
软件I2C(也称为软件模拟I2C)和硬件I2C是两种不同的协议实现方式,用于在微控制器或嵌入式系统中实现I2C通信。它们在实现和性能方面有一些区别。
软件I2C是通过GPIO(通用输入输出)引脚模拟I2C总线的时序和信号传输。由于软件I2C需要使用GPIO引脚来模拟I2C总线的时钟和数据线,因此它需要一定的软件延迟和CPU计算来生成和检测相应的电平变化。软件I2C使用通用的GPIO接口进行数据传输,因此可以在任何具备GPIO和定时器功能的微控制器上实现。
硬件I2C则是使用专门的I2C外设来处理I2C通信。硬件I2C通常由硬件内部的特定电路实现,包括时钟生成器、收发器和状态机等。这些硬件模块通过硬件电路来处理I2C通信的细节,实现了更高的速度和更低的处理器负载。硬件I2C的实现通常需要特定的硬件引脚和专用的I2C外设。
下面是软件I2C和硬件I2C的一些区别:
1.实现复杂性:软件I2C的实现相对较为简单,只需通过GPIO和软件逻辑实现相应的时钟和数据线变化即可。硬件I2C则需要使用专用的I2C外设和相关硬件电路,需要更多的硬件支持和配置。
2.速度和性能:硬件I2C通常能够实现更高的通信速度,因为它利用硬件内部的电路和专门的I2C外设来处理信号传输。软件I2C由于需要软件延迟和处理器计算,因此通常速度较慢,并且在高速通信时容易受到处理器负载和中断延迟等因素的影响。
3.资源需求:软件I2C通常只需要使用一些GPIO引脚和软件计算资源,因此对硬件资源需求较低。硬件I2C需要特定的硬件引脚和外设,通常在芯片级别集成,因此会占用更多的硬件资源。
4.可移植性:由于软件I2C只依赖通用的GPIO接口和定时器功能,因此可以在各种不同的微控制器平台上实现。硬件I2C则需要特定的硬件支持,因此在不同的芯片和平台上的实现可能有所不同。
综上所述,软件I2C适用于一些简单的应用场景和对资源要求较低的情况,而硬件I2C则适用于需要高速通信和更可靠性的应用场景。选择哪种方式取决于具体的应用需求和设备平台的支持情况。
三、变量的声明和定义区别
在C语言中,变量的声明和定义是两个不同的概念,尽管它们经常在代码中一起使用。下面是它们的区别:
1.声明(Declaration):在程序中,声明是指向编译器提供有关变量的信息,包括变量的名称和类型。它向编译器说明了变量的存在,使得编译器在后续代码中能够正确地使用这个变量。声明通常出现在代码的顶部或函数的参数列表中,用来告诉编译器有关变量的信息。
示例:
extern int number; // 变量声明
void foo(int x); // 函数参数声明
在变量声明中,使用关键字"extern"可以告诉编译器该变量是在其他地方定义的,并且在当前文件中仅作为引用使用。
2.定义(Definition):定义是指向编译器提供有关变量的完整信息,包括变量的名称、类型和存储空间分配。它除了告诉编译器有关变量的信息外,还为变量分配实际的内存空间。变量的定义只能在程序中出现一次。
示例:
int number; // 变量定义
void foo(int x) {int y; // 变量定义// ...
}
在变量定义中,为变量指定了类型和名称,并且为其分配了存储空间。
总结来说,声明是为了让编译器知道变量的存在,定义是在声明的基础上为变量分配存储空间。在实际编程中,通常会将变量的声明与定义结合在一起,这样可以在声明的同时为变量分配内存空间。例如:
int number; // 变量声明和定义,分配存储空间
需要注意的是,在函数参数列表中声明变量时,同时也进行了定义。因为在函数调用时,参数被复制给形式参数,形式参数在函数内部作为局部变量使用。所以,函数参数的声明就是定义。
void foo(int x); // 函数参数声明和定义
四、static在C和C++中的区别
在C和C++中,关键字static具有不同的用法和语义。
在C中:
1.全局静态变量:在函数外部定义的全局变量可以加上static修饰符来使其成为静态变量。静态全局变量的作用域仅限于定义它的源文件,其他文件无法直接访问该变量,即具有文件作用域。静态全局变量在程序的整个运行期间都存在,不会随着函数的调用而被创建和销毁。
2.局部静态变量:在函数内部定义的变量加上static修饰符即为局部静态变量。局部静态变量在函数的生命周期内保持其值不变,且仅在首次进入函数时进行初始化,之后不再初始化。
在C++中:
1.静态成员变量:在类中声明的静态变量成员属于整个类的,而不是类的每个对象的。静态成员变量在内存中只有一份拷贝,被所有类对象共享。它们需要在类外部进行定义和初始化。
2.静态成员函数:静态成员函数属于类本身,而不属于类的任何对象。它可以直接通过类名调用,无需创建对象实例。静态成员函数无法访问非静态成员变量,只能访问静态成员变量和其他静态成员函数。
3.需要注意的是,在C和C++中,静态变量或静态成员变量的初始化规则略有不同。在C中,可以使用等号赋值来初始化静态变量,如果没有显式初始化,则会被初始化为0或空值。而在C++中,对于静态成员变量,需要在类外部进行定义和初始化,例如int MyClass::staticVar = 0;。
综上所述,static在C和C++中具有不同的用法和语义,分别用于定义静态全局变量、局部静态变量、静态成员变量和静态成员函数。这些用法的具体含义和行为在不同的语言中可能有所不同。
五、串口总线空闲时候的电平状态
当串口总线处于空闲状态时,其电平状态取决于特定的串口协议和信号约定。通常情况下,常见的串口总线协议(如RS-232、RS-485、TTL UART)在空闲状态下都有特定的电平表示。以下是它们的一般描述:
1.RS-232:在RS-232协议中,空闲状态下的电平为负电平(逻辑高电平)。这意味着发送和接收线都保持在负电平,通常是在-3到-15伏之间。
2.RS-485:在RS-485协议中,空闲状态下的电平为逻辑高电平,也被称为"空闲线状态"(Idle Line State)。发送和接收线都维持在一个稳定的高电平(通常是+3到+15伏),表示总线空闲。
3.TTL UART(像Arduino等微控制器上的UART):TTL UART是一种常见的串口通信标准,其中电平通常由系统的供电电压决定。在空闲状态下,TTL UART的电平通常是逻辑高电平(供电电压)。
需要注意的是,虽然上述描述是常见的情况,但串口总线的电平状态可能因特定硬件设计和使用的协议而不同。因此,在具体的应用中应查阅硬件规格表、参考相关文档或协议标准以确定特定串口总线在空闲状态下的电平状态。
总结
本篇文章就讲解到这里。
相关文章:
嵌入式笔试面试刷题(day15)
文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟…...
【Docker】Dockerfile构建镜像
一、编写Dockerfile文件 编写镜像需要的运行环境(Linux、java等), Dockerfile文件内容如下: # 使用官方的 Ubuntu 16.04 镜像作为基础镜像 FROM ubuntu:16.04# 更新包列表 RUN apt-get update# 安装所需的软件包 RUN apt-get ins…...
fota升级,可卸载apk也进行更新
首先如题目要求 可卸载apk是通过刷机或恢复出厂设置之后执行脚本安装的 然后fota升级后,在判断是否“是第一次刷机和恢复出厂设置”时候会返回false,就导致脚本没有执行。导致apk升级不成功 所以我们要完成这个就是,确定fota什么时候升级完…...
ASP.NET dotnet 3.5 实验室信息管理系统LIMS源码
技术架构:ASP.NET dotnet 3.5 LIMS作为一个信息管理系统,它有着和ERP、MIS之类管理软件的共性,如它是通过现代管理模式与计算机管理信息系统支持企业或单位合理、系统地管理经营与生产,最大限度地发挥现有设备、资源、人、技术的…...
2023!6招玩转 Appium 自动化测试
Appium是个什么鬼 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页…...
WireShark抓包分析TCP三次握手过程,TCP报文解析
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取TCP协议三次握手的数据包&am…...
【C语言】指针和数组笔试题解析
大家好,我是苏貝,本篇博客带大家了解指针和数组笔试题解析,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.前言2.一维数组2.字符数组2.12.22.32.42.52.6 1.前言 本篇文章是讲述在不同数…...
Vue的模板语法(下)
一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符, .stop, .prevent,.capture,.self,.once .stop:阻止事件冒泡。当一个元素触发了事件,并且该元素包含嵌套的父元素时&#…...
Zookeeper客户端——I0Itec-zkClient
dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问题。 1)ZooKeeper的Watcher是一次性的,用过了需要再注册; 2) session的超时后…...
火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性
背景 ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础&…...
hashmap使用
hashmap作为dao对象存储数据库数据 list是把每一个数据库的字段都映射了,而hashmap则是唯一id:数据库字段作为key hashmap遍历方式 public class Main {//使用迭代器(Iterator)EntrySetpublic static void main(String[] args) {// 创建并赋…...
Centos7配置国内yum源
目录 备份原系统中的repo文件配置国内开源镜像重新生成yum缓存 备份原系统中的repo文件 cd /etc/yum.repos.d/mkdir repo_bakmv *.repo repo_bak/配置国内开源镜像 到网易和阿里开源镜像站点下载系统对应版本的repo文件 curl -O http://mirrors.aliyun.com/repo/Centos-7.re…...
C#中async/await的线程ID变化情况
一、简单的起步 Console.WriteLine($"主线程开始ID:{Thread.CurrentThread.ManagedThreadId}");//aawait Task.Delay(100);//cConsole.WriteLine($"主线程结束ID:{Environment.CurrentManagedThreadId}");//b 结果: …...
网络安全—黑客技术—自学笔记
目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来…...
功夫再高也怕菜刀。多年经验,会独立开发的机器视觉工程师,技术太强,但是找工作能力差劲
功夫再高也怕菜刀,专业的事情交给专业的人去做。 今年7月份中旬的时候,遇到一位老朋友,向我咨询某公司的信息,其实我根本不了解这家公司的情况与实力,向他说了,抱歉,我查下,等我晚上…...
numpy的多项式函数: `poly1d`
Python numpy.poly1d() numpy.poly1d()函数有助于定义一个多项式函数。它使得在多项式上应用 "自然操作 "变得容易。 语法: numpy.poly1d (arr, root, var) 参数 : arr : [array_like] 多项式系数按照幂的递减顺序给出。如果第二个参数(根)被…...
Python灰帽编程——错误异常处理和面向对象
文章目录 1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测(捕获)异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 2. 内网主机存活检测程序2.1 scapy 模块2.1.1 主要功能2.1.2 scapy 安装…...
【20230919】win11无法删除Chrome注册表项
win11无法删除Chrome注册表项 删除以下注册表项发生错误: 计算机\HKEY_LOCAL_MACHINE\SOFTWAR\Google计算机\HKEY_CURRENT_USER\Software\Google 尝试了很多删除注册表方法(例如:编辑remove.reg文件),都不行。 无法…...
TCP/IP客户端和服务器端建立通信过程
客户端和服务器端建立通信过程 使用Qt提供的类进行基于TCP的套接字通信需要用到两个类: QTcpServer:服务器类,用于监听客户端连接以及和客户端建立连接。 QTcpSocket:通信的套接字类,客户端、服务器端都需要使用。服务…...
Python ---使用Fake库向clickhouse造数据小案例
每次insert太麻烦了 先在clickhosue中建表 test_user表 CREATE TABLE dwh.test_user (name String,age Int32,address String,phone String,email String ) ENGINE MergeTree() ORDER BY name; 此时表中暂无数据 用Python脚本来造一些数据 from faker import Faker from c…...
09MyBatisX插件
MyBatisX插件 在真正开发过程中对于一些复杂的SQL和多表联查就需要我们自己去编写代码和SQL语句,这个时候可以使用MyBatisX插件帮助我们简化开发 安装MyBatisX插件: File -> Settings -> Plugins -> 搜索MyBatisx插件搜索安装然后重启IDEA 跳转文件功能 由于一个项…...
使用 Messenger 跨进程通信
什么是Messenger Messenger 也是IPC的方案之一,是基于消息的跨进程通信。基于消息是什么意思?Handler是我们最常用的消息机制,所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已,它们…...
Spring Cloud Gateway
路由谓词工厂 Route Predicate Factory 1. The After Route Predicate Factory spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver]# 用日期时间匹配 2. The Before Route Pr…...
JVM 优化技术
文章目录 JVM 优化技术概述方法内联优化说明优点内联条件 栈帧之间数据共享说明优点栈帧之间数据共享条件 JVM 优化技术 概述 JVM常见的优化技术: 方法内联优化。栈帧之间数据共享。 方法内联优化 说明 方法内联(Method Inlining)是JVM…...
【MySQL系列】- MySQL自动备份详解
【MySQL系列】- MySQL自动备份详解 文章目录 【MySQL系列】- MySQL自动备份详解一、需求背景二、Windows mysql自动备份方法2.1 复制date文件夹备份实验备份环境创建bat直接备份脚本 2 .2 mysqldump备份成sql文件创建mysqldump备份脚本 2 .3 利用WinRAR对MySQL数据库进行定时备…...
指针笔试题讲解-----让指针简单易懂(2)
目录 回顾上篇重点 : 一.笔试题 ( 1 ) 二.笔试题 ( 2 ) 科普进制知识点 (1) 二进制 (2) 八进制 (3)十六进制 三.笔试题( 3 ) 四.笔试题( 4 ) 五.笔试题( 5 ) 六.笔试题( …...
使用windbg分析dump文件的方法
https://zhuanlan.zhihu.com/p/613434365 一般操作如下: 准备工作。 打开dump文件。指定符号表文件的路径。指定可执行文件的路径。指定源码文件的路径。在windbg的命令行,输入并执行如下命令 .reload,重新加载前述数据文件。!analyze -v&a…...
【论文阅读 07】Anomaly region detection and localization in metal surface inspection
比较老的一篇论文,金属表面检测中的异常区域检测与定位 总结:提出了一个找模板图的方法,使用SIFT做特征提取,姿态估计看差异有哪些,Hough聚类做描述符筛选,仿射变换可视化匹配图之间的关系…...
SSM - Springboot - MyBatis-Plus 全栈体系(十一)
第二章 SpringFramework 五、Spring AOP 面向切面编程 6. Spring AOP 基于 XML 方式实现(了解) 6.1 准备工作 加入依赖和基于注解的 AOP 时一样。准备代码把测试基于注解功能时的 Java 类复制到新 module 中,去除所有注解。 6.2 配置 Sp…...
深度剖析贪心算法:原理、优势与实战
概述 贪心算法是一种通过每一步的局部最优选择来寻找整体最优解的方法。在每个步骤中,贪心算法选择当前状态下的最佳选项,而不考虑未来可能的影响。尽管它不能保证一定能找到全局最优解,但贪心算法通常简单且高效,适用于许多实际…...
喀什网站建设公司/一键生成原创文案
Processing入门简介 http://blog.csdn.net/mysunnytime/article/details/16104723 Processing官方教程 https://processing.org/tutorials/gettingstarted/ Processing程序中重写了两个函数:setup()和draw()。 setup()是在程序开始时调用的函数,只执…...
影视传媒公司/外汇seo公司
http://club.pchome.net/thread_1_15_4954062__.html这里贴个网友的防骗秘笈下面给大家以重要提示:一、骗子一般都不支持中介二、在大家使用淘宝链接时一定要慢之又慢,千万别操之过急,注意观察:1、骗子给的淘宝网址一般都比较长&a…...
吉林省 网站建设/百度不收录网站怎么办
启动hive的时候出现如下错误 [rootBigdata01 bin]# hive ls: 无法访问/opt/module/spark/lib/spark-assembly-*.jar: 没有那个文件或目录 20/09/03 20:29:03 WARN conf.HiveConf: HiveConf of name hive.metastore.local does not existLogging initialized using configurati…...
网站建设递进发展趋势/百度2022最新版本
蜘蛛和蜜蜂订婚,蜘蛛感到很不满意,于是就问他的妈妈:"为什么要让我娶蜜蜂?"蜘蛛的妈妈说:"蜜蜂是吵了一点,但人 家好歹也是个空姐。"蜜蜂也感到很不满意,于是就问她的妈妈:…...
郑州网站建设开拓者/谷歌推广开户多少费用
HTML DOM 访问访问 HTML DOM - 查找 HTML 元素。访问 HTML 元素(节点)访问 HTML 元素等同于访问节点您能够以不同的方式来访问 HTML 元素:通过使用 getElementById() 方法通过使用 getElementsByTagName() 方法通过使用 getElementsByClassName() 方法getElementByI…...
双流规划建设管理局网站/爱站网关键词查询网站的工具
一、 数据库的导出(expdp)1.创建默认导出目录SQL>create directory [dirname] as ‘[dirpath]’;2.赋予指定用户在此目录的读写权限SQL>GRANT READ, WRITE ON DIRECTORY [dirname] to [dbuser];3.使用expdp导出数据库① 导出完整schema> expdp [username/passwd]DUMPF…...