嵌入式笔试面试刷题(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的电平通常是逻辑高电平(供电电压)。

需要注意的是,虽然上述描述是常见的情况,但串口总线的电平状态可能因特定硬件设计和使用的协议而不同。因此,在具体的应用中应查阅硬件规格表、参考相关文档或协议标准以确定特定串口总线在空闲状态下的电平状态。

总结

本篇文章就讲解到这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/136797.html

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

相关文章

【超实用】2023年,学生上班族如何简单快速,低成本的搭建一个博客网站

文章目录 前言实操环节香港虚拟机购买博客搭建ssl证书配置备份设置 总结 前言 因为工作和生活的需要,我一直有博客的搭建需求。我将总结下来,为读者提供参考。  起初,我采用的是香港云虚拟主机,这种虚拟机极其便宜(一…

什么样的应用程序适合使用Flutter开发桌面?

桌面应用开发的现状 在过去,桌面应用程序的开发通常需要使用特定于操作系统的工具和语言,如C、C#、Java等。这导致了高昂的开发成本和维护困难。尽管有一些跨平台桌面开发工具,如Electron和Qt,但它们在性能、用户体验和开发效率方…

Linux Static Key原理与应用

文章目录 背景1. static-key的使用方法1.1. static-key定义1.2 初始化1.3 条件判断1.4 修改判断条件 2、示例代码参考链接 背景 内核中有很多判断条件在正常情况下的结果都是固定的,除非极其罕见的场景才会改变,通常单个的这种判断的代价很低可以忽略&a…

Python3 语法简明教程

目录 0 前言1 输出语句、注释1.1 输出语句1.2 单行、多行注释 2 变量与对象、输入语句2.1 变量与对象2.2 数字类型和运算符2.3 输入语句 3 条件控制、循环语句3.1 条件控制3.2 循环语句3.2.1 while...else3.2.2 for...else 4 字典5 元组、列表5.1 元组5.2 列表 6 集合、推导式6…

C语言——贪吃蛇小游戏

目录 一、ncurse 1.1 为什么需要用ncurse: 1.2 ncurse的输入输出: 1.2.1 如何使用ncurse: 1.2.2 编译ncurse的程序: 1.2.3 测试输入一个按键ncurse的响应速度: 1.3 ncurse上下左右键获取: 1.3.1 如…

【IntelliJ IDEA】cmd和idea Terminal查看java版本不一致

问题描述 原来win10电脑上安装的是jdk8的版本,因某些原因,现在想换成jdk7的版本,修改环境变量后,在cmd中执行 [java -version]命令,显示的是7的版本。 但在idea的Terminal中执行,确实显示8的版本。 原因分…

基于深度强化学习的四旋翼无人机航线跟随

源自:指挥与控制学报 作者:杨志鹏 李波 甘志刚 梁诗阳 摘 要 针对无人机在空中执行航线跟随任务时无法对未知环境作出合理应对措施等问题, 提出了一种基于深度强化学习的四 旋翼无人机航线跟随方法. 通过无人机受力分析、欧拉角变换建立四旋翼无人…

2023.9.18 网络层 IP 协议详解

目录 IP协议 IPv4 32位 源IP 地址 / 32位 目的IP 地址 IP 地址管理 特殊 IP 路由选择 IP协议 IPv4 32位 源IP 地址 / 32位 目的IP 地址 基本知识: 在 IP 报头中一般表示为 32位 二进制整数日常生活中的 IP 一般将 32位 二进制整数,也就是 4字节 的二…

2023/9/19 -- C++/QT

作业 1> 登录框实现注册功能,将注册的结果放入文件中(君子作业) 2> 完成文本编辑器的保存工作 void Widget::on_saveBtn_clicked() {QString fileName QFileDialog::getSaveFileName(this,"另存为","./","…

036:vue导出页面生成pdf文件

第036个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

元数据管理平台Datahub0.10.5版本安装部署与导入各种元数据手册

官网文档连接 DataHub Quickstart Guide | DataHub (datahubproject.io) 本文所选择的Python的版本为3.8.16,Docker版本为20.10.0,Datahub为0.10.5版本 python必须为3.7以上的版本。0.10.5不支持以下的版本 如果要使用web上的 添加数据源 直接调用的…

中国提出FastSAM:在RTX3090上提升了ViT-H E(32×32) 50倍速度

文章目录 1. Abstract2. 背景介绍3. 框架详情 (Methodology)3.1 Overview3.2 All-instance Segmentation3.3 Prompt-guided Selection4. Experiments4.1 Run-time Efficiency Evaluation4.2 Zero-Shot Edge Detection4.2.1 BSDS5004.2.2 Sobel filtering4.2.3 NMS4.3 Zero-Shot…

Redis 列表操作实战(全)

目录 LINDEX 获取指定下标元素 LSET 指定下标添加元素 LPUSH 将元素插入列表头 LPUSHX RPUSH 将元素插入列表尾 RPUSHX LINSERT 将元素插入列表某位置之前 LLEN 列表长度 LPOP 取列表头元素 RPOP 取列表尾元素 BLPOP 阻塞式取列表头元素 BRPOP 阻塞式取列表尾元素…

视频监控系统/视频汇聚平台EasyCVR平台页面展示优化

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

企望制造ERP存在远程命令执行漏洞 附POC

文章目录 企望制造ERP存在远程命令执行漏洞 附POC1. 企望制造ERP简介2.漏洞描述3.影响版本4.fofa查询语句5.漏洞复现6.POC&EXP7.整改意见8.往期回顾 企望制造ERP存在远程命令执行漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播…

C# OpenCvSharp 图片模糊检测(拉普拉斯算子)

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyl…

python+django学习资料在线分享系统vue

本站是一个B/S模式系统,采用vue框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得校园资料分享平台管理工作系统化、规范化。技术栈 后端:pyth…

零基础学前端(四)1. 重点讲解 CSS:盒子模型、样式选择器

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 3. 初学者切忌,不要眼花缭乱,不要四处找其它文档,要坚定一个教授者的方式,将其学通透&#xff…

RK3568平台开发系列讲解(驱动篇)RK3568 I2C总线介绍

🚀返回专栏总目录 文章目录 一、I2C 简介1.1、起始位1.2、停止位1.3、数据传输1.4、应答信号1.5、I2C 写时序1.6、I2C 读时序1.7、I2C 多字节读写时序二、RK3568 I2C 总线介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解RK3568 I2C总线特性。 一、…

使用 K 均值聚类进行颜色分割

介绍 颜色分割是计算机视觉中使用的一种技术,用于根据颜色识别和区分图像中的不同对象或区域。聚类算法可以自动将相似的颜色分组在一起,而不需要为每种颜色指定阈值。当处理具有大范围颜色的图像时,或者当事先不知道确切的阈值时,这非常有用。 在本教程中,我们将探讨如何…