嵌入式笔试面试刷题(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.mzph.cn/news/83052.shtml

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

相关文章

pgzrun 拼图游戏制作过程详解(10)

10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名,Photo_ID用来统计当下是第几张拼图,Squares储存当下拼图的24张小拼图的文件名,Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…

基于Java+SpringBoot+Vue+Element的OA系统的设计和实现

基于JavaSpringBootVueElement的OA系统的设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的…

AI写作工具,智能ai写作工具

在信息化时代,内容创作已经成为了许多行业的核心。从营销广告到新闻报道,从博客文章到学术论文,人们需要不断地产生高质量的文字内容。创作是一项耗时耗力的工作,需要丰富的知识和创造性思维。 AI写作工具,是一类基于人…

基于Spring Boot的医院预约挂号系统设计与实现

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

SAP ABAP基础知识 访问外部数据库-开发篇

前言 本文主要介绍通过ABAP语言访问外部数据库的几种方式 一、外部数据库配置 本文示例中的代码访问了两个外部数据库 MTD : 外部oracle数据库,其中示例表 ZTTEMP 字段( ZZTNO,WERKS) S4Q : 外部HANA数据库(开发系统访问测试系统的数据库), 使用表USR02,ZTTEMP 二、ABAP访问…

IDEA(2023)解决运行乱码问题

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 &#x1f33c…

【计算机组成原理】读书笔记第三期:内存和磁盘的关系

目录 写在开头 内存与磁盘的关系 基本关系 磁盘缓存 虚拟内存 节约内存的编程方法 通过DLL文件实现函数共有 通过调用_stdcall来降低文件程序的大小 磁盘的物理结构 结尾 写在开头 本文继续阅读总结《程序是怎样跑起来的》这本书(作者:矢泽…

操作系统(5-7分)

内容概述 进程管理 进程的状态 前驱图 同步和互斥 PV操作(难点) PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S)&#…

【计算机网络】——传输层

//图片取自王道,仅做交流学习 一、传输层提供的服务 物理层、数据链路层、网络层是通信子网。 传输层:它属于面向通信部分的最高层,同时也是用户功能的最低层 为应用层提供通信服务使用网络层的服务 网络层提供主机之间的逻辑通信。 1、传输…

SpringMVC之JSR303与拦截器

目录 一.JSR303 1.什么是JSR303 2.为什么使用JSR303 3.JSR303常用注解 4.快速入门 4.1导入Maven依赖 4.2 配置校验规则 4.3 对服务端数据添加进行校验 4.4 结果测试 二.拦截器 1.什么是拦截器 2.拦截器与过滤器 3.应用场景 4.基本拦截器配置 5 案例演示&#xff0…

区块链实验室(23) - FISCO中PBFT耗时与流量特征

前面的实验(区块链实验室(11) - PBFT耗时与流量特征)用仿真的PBFT观察耗时。现在用真实的Fisco网络再次观察其特征。同样地,用相同的网络,即100个节点构成的无标度网络。在每个节点上发起10次交易,记录每次交易的耗时。结果见下图所示。 前半…

VSCode『SSH』连接服务器『GUI界面』传输

前言 最近需要使用实验室的服务器训练带有 GUI 画面的 AI 算法模型(pygame),但是我是使用 SSH 连接的,不能很好的显示模型训练的效果画面,所以下面将会讲解如何实现 SSH 连接传输 Linux GUI 画面的 注:我们…

Postman —— HTTP请求基础组成部分

一般来说,所有的HTTP Request都有最基础的4个部分组成:URL、 Method、 Headers和body。 (1)Method 要选择Request的Method是很简单的,Postman支持所有的请求方式。 (2)URL 要组装一条Request…

华为HCIA(五)

Vlan id 在802.1Q中 高级ACL不能匹配用户名和源MAC 2.4G频段被分为14个交叠的,错列的20MHz信道,信道编码从1到14,邻近的信道之间存在一定的重叠范围 STA通过Probe获取SSID信息 Snmp报文 网络管理设备异常发生时会发送trap报文 D类地址是…

基于Java网络书店商城设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

亚马逊云科技 Amazon Lightsail :一种在云服务器上运行容器的简单方法

当向开发人员介绍亚马逊云科技云服务时,通常会花一点时间来介绍并演示 Amazon Lightsail 。它是迄今为止开始使用亚马逊云科技的最简单方法。使用它,您在几分钟内即可在自己的虚拟服务器上运行您的应用程序。而后增加了在 Amazon Lightsail 上部署基于容…

C语言字符函数和字符串函数(1)

大家好,我们又见面了,让大家久等了,我们今天就来学习字符函数和字符串函数。 在开启今天的学习之前呢,我来解决一下一些小伙伴平时找不到库函数使用的烦恼,因为我们cplusplus.com最新版本不能够查询函数,我…

排查disabled问题之谷歌新版本特性

问题复现 最近我突然接手一个后台的bug,这个后台很久没有迭代更新了,我也不熟悉业务,所以只能看一下源码,问题很快就复现,测试的修复操作也很正确,就是因为渲染的input标签中存在disableddisabled’属性导…

英国留学生务必谨慎使用ChatGPT!!!

ChatGPT(全名:Chat Generative Pre-trained Transformer),是OpenAI研发的聊天机器人程序,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够基于在预训练阶段所见的模式和统计规律…

1.IAR-8051安装

新版安装教程:IAR EW for 8051 简介与安装 新版软件zhuce:IAR EW for 8051 软件注册 - 知乎 这个新版的我也放到网盘里面了,自己自行选择安装 一、下载IAR-8051 链接:https://pan.baidu.com/s/1mYwSQvSjAiSzltrEbK3yAw?pwd43cd …