02嵌入式面经

嵌入式面经


C语言的函数调用原理是什么?

  1. 栈帧(Stack Frame):

    • 在函数调用时,会创建一个新的栈帧,用于存储函数的局部变量、参数、返回地址以及其他相关信息。
    • 栈帧通常包括以下几个部分:
      • 参数: 被调用函数的参数被压入栈中,按照一定的顺序排列。
      • 返回地址: 调用函数的返回地址被压入栈中,用于指示函数执行完毕后返回的位置。
      • 局部变量: 被调用函数的局部变量在栈帧中分配空间。
      • 其他辅助信息: 如保存的寄存器状态等。
  2. 调用过程:

    • 在函数调用前,调用者需要将参数压入栈中。
    • 调用者将函数的返回地址压入栈中,然后跳转到被调用函数的入口地址。
    • 被调用函数开始执行,创建新的栈帧,并将参数和局部变量存储在其中。
    • 被调用函数执行完毕后,将返回值存储在适当的位置,然后将返回地址弹出栈,并跳转到该地址,返回到调用函数处。
  3. 栈的管理:

    • 栈用于存储函数调用过程中的参数、局部变量和返回地址等信息。
    • 栈的大小通常是固定的,当函数调用嵌套层级很深或者函数中声明了大量的局部变量时,可能会导致栈溢出。
    • 在函数调用结束后,栈上的空间会被释放,以便其他函数调用使用。

总的来说,C语言中的函数调用原理涉及到栈的使用和管理,通过栈帧来保存函数调用过程中的相关信息,并通过栈来传递参数和返回值。

什么是封装、继承、多态?

  1. 封装(Encapsulation):

    • 封装是将数据和操作数据的方法(即函数)封装在一起,形成一个完整的、相互依赖的单元。通过封装,对象的内部细节被隐藏起来,外部只能通过对象所提供的接口来访问和操作对象的状态。
    • 封装提供了良好的抽象屏障,使得对象的内部实现细节对外部是透明的,从而降低了系统的耦合度,提高了代码的可维护性和可重用性。
  2. 继承(Inheritance):

    • 继承是一种机制,通过它一个类(称为子类或派生类)可以从另一个类(称为父类或基类)继承属性和方法。子类可以直接访问父类中的非私有成员(即公有成员和受保护成员),并且可以扩展或修改父类的行为。
    • 继承实现了代码的重用,通过定义通用的类并从中派生出具体的类,可以减少代码的重复编写,并且使得代码的结构更加清晰和易于理解。
  3. 多态(Polymorphism):

    • 多态是指同一个操作作用于不同的对象上时会产生不同的行为。在面向对象编程中,多态通常通过函数重载(Overloading)和虚函数(Virtual Function)来实现。
    • 函数重载允许同一个函数名可以有多个不同的参数列表或不同的返回类型,从而实现了同名函数的多态性。
    • 虚函数允许子类重写父类中的同名函数,并且在运行时根据对象的实际类型来确定调用的是哪个版本的函数,从而实现了运行时多态性。

深拷贝和浅拷贝有何区别?

  1. 浅拷贝(Shallow Copy):

    • 浅拷贝是将一个对象的引用复制给另一个对象,而不是复制对象本身。这意味着两个对象共享同一块内存空间,它们指向相同的内存地址。
    • 当对其中一个对象进行修改时,另一个对象也会受到影响,因为它们指向相同的数据。换句话说,浅拷贝只复制了对象的表面结构,没有复制对象内部的数据。
  2. 深拷贝(Deep Copy):

    • 深拷贝是将一个对象的所有内容复制给另一个对象,包括对象内部的所有数据。这意味着在内存中会创建一个新的对象,并且将原对象中的所有数据复制到新对象中。
    • 由于深拷贝会复制对象的所有数据,因此修改其中一个对象不会影响到另一个对象,它们在内存中彼此独立,互不影响。

总的来说,浅拷贝只复制对象的表面结构,而深拷贝则复制对象的所有内容,包括内部的数据。 在实际编程中,需要根据具体的需求来选择合适的拷贝方式。

友元在C++中的含义是什么?

  • 被声明为某个类的友元函数后,就可以访问该类的私有成员和受保护成员。
  • 声明友元函数的语法是在类的内部使用 friend 关键字声明

struct和class在C++中的区别是什么?

  1. 成员访问权限默认值:

    • 对于 struct,默认的成员访问权限是公有(public),这意味着在结构体中声明的成员默认是公有的,可以被外部访问。
    • 而对于 class,默认的成员访问权限是私有(private),这意味着在类中声明的成员默认是私有的,只能在类的内部访问。
  2. 其他细微差异:

    • 在继承方面,struct 默认继承是公有继承(public inheritance),而 class 默认继承是私有继承(private inheritance)。
    • 在内存布局上,structclass 的成员排列顺序一致,但是 class 可能会有额外的对齐规则。
    • 从语义上来说,struct 更偏向于数据结构,而 class 更偏向于面向对象编程,但这并不是绝对的,因为两者都可以定义成员函数和数据成员。

CPU、MPU、MCU、SOC、SPOC有何区别?

  1. CPU(Central Processing Unit):

    • CPU是中央处理单元的缩写,是计算机中的主要处理器,负责执行程序指令、处理数据以及控制计算机的操作。
  2. MPU(Microprocessor Unit):

    • MPU是微处理器单元的缩写,通常用于指代嵌入式系统中的微处理器,如用于控制、数据处理和通信等任务的芯片。
  3. MCU(Microcontroller Unit):

    • MCU是微控制器单元的缩写,是一种集成了处理器核心、存储器、输入输出接口和定时器等功能模块的芯片。它通常被用于嵌入式系统中,用于控制各种设备和系统。
  4. SoC(System on Chip):

    • SoC是片上系统的缩写,指的是将所有计算机或电子系统的核心功能集成到一个芯片上的解决方案。这包括处理器核心、内存、输入输出接口、通信接口等。
  5. SPOC(Secure Processor On Chip):

    • SPOC是片上安全处理器的缩写,是一种专门用于安全计算、数据保护和安全通信的芯片或处理器。

嵌入式系统基于ROM和基于RAM的运行方式有何区别?

  1. 基于ROM的运行方式:

    • 在基于ROM的嵌入式系统中,程序和数据通常存储在只读存储器(ROM)中,这些数据是预先固化在芯片中的,用户无法修改。
    • 程序的执行速度相对较慢,因为数据只能从ROM中读取,不能进行实时修改。
    • 这种方式通常用于那些程序和数据稳定不变、对性能要求不高、对存储容量有限的应用场景,如嵌入式控制器、嵌入式系统固件等。
  2. 基于RAM的运行方式:

    • 在基于RAM的嵌入式系统中,程序和数据存储在随机存储器(RAM)中,用户可以动态地读取、写入和修改数据。
    • 程序的执行速度相对较快,因为数据可以直接在RAM中读取和修改,不需要额外的访问时间。
    • 这种方式通常用于那些对性能要求较高、需要动态修改程序和数据、对存储容量要求较大的应用场景,如智能手机、平板电脑、嵌入式系统的操作系统等。

linux中断和异常有何区别?

  1. 中断(Interrupt):

    • 中断是由外部设备或其他处理器发出的信号,用于通知 CPU 某个事件已经发生,需要 CPU 进行相应的处理。
    • 中断可以是硬件中断(Hardware Interrupt)或软件中断(Software Interrupt)。
    • 硬件中断是由硬件设备(如时钟、键盘、鼠标等)发送给 CPU 的信号,用于通知 CPU 进行相应的处理。处理硬件中断的程序称为中断处理程序(Interrupt Service Routine,ISR)。
    • 软件中断是由程序中的特殊指令(如系统调用)或软件发出的信号,用于请求操作系统进行某种服务或操作。
  2. 异常(Exception):

    • 异常是由 CPU 在执行指令时检测到的一种错误或不寻常情况,它们可能是由程序错误、非法指令、内存访问错误等引起的。
    • 异常可以是故障(Fault)、陷阱(Trap)或终止(Abort)的形式。
    • 故障是一种可以被修复的异常,例如缺页异常,操作系统可以尝试加载所需的页面。
    • 陷阱是一种由程序有意触发的异常,通常用于实现系统调用或软件调试。
    • 终止是一种无法修复的异常,通常会导致程序的终止或操作系统的崩溃。

中断和DMA的区别是什么?

  1. 中断(Interrupt):

    • 中断是一种异步事件处理机制,用于处理来自外部设备或其他处理器的通知或信号。
    • 当外部设备需要 CPU 的处理或者发生了特定的事件时,会发送中断信号给 CPU,CPU 将暂时中止当前的执行流,跳转到中断处理程序(ISR)执行相应的处理。
    • 中断是一种响应式的机制,通常由外部设备或其他部件触发,CPU 需要响应并执行相应的处理逻辑,然后恢复到原来的执行流程。
  2. 直接内存访问(DMA,Direct Memory Access):

    • DMA 是一种数据传输机制,允许外部设备直接访问内存而无需 CPU 的介入。
    • 当需要大量数据的传输时,传统的方式是由 CPU 通过 I/O 指令来处理数据传输,这会占用 CPU 的大量时间和资源。
    • 使用 DMA,外部设备可以直接与内存进行数据交换,而无需通过 CPU,从而提高数据传输的效率和性能。
    • DMA 控制器负责管理数据传输的过程,包括内存地址、数据量、传输方向等,减轻了 CPU 的负担,让 CPU 可以同时处理其他任务。

总的来说,中断是一种事件驱动的处理机制,用于响应外部设备的信号或事件;而DMA是一种数据传输机制,用于实现高效的数据传输而无需 CPU 的持续介入,从而提高了系统的性能和效率。两者在功能和应用场景上有所不同,但都是计算机系统中重要的数据传输和处理机制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux第三节--常见的指令介绍集合(持续更新中)

点赞关注不迷路!,本节涉及初识Linux第三节,主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 ✨ 加关注👀 期待与你共同进步! Linux下基本指令 1. man指令 Linu…

在uniapp里面使用 mp-html 并且开启 latex 功能

在uniapp里面使用 mp-html 并且开启 latex 功能 默认情况下 mp-html 是不会开启 latex 功能的, 如果需要开启 latex 功能是需要到代码操作拉取代码自行打包的。 这里说一下 mp-html 里面的 latex 功能是由 https://github.com/rojer95/katex-mini 提供的技术实现,…

科技园3d数据可视化展示

我们的园区安防3D可视化报警平台通过高精度三维建模技术,将管理对象场景以立体、直观的方式呈现,实现管理对象的全面可视化。同时,平台与各类业务系统深度对接,实现数据、告警、远程操作的整合展示和联动响应,构建中心…

Java基础教程 - 4 流程控制

更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 4 流程控制 4.1 分支结构…

CSS Web服务器、2D、动画和3D转换

Web服务器 我们自己写的网站只能自己访问浏览,但是如果想让其他人也浏览,可以将它放到服务器上。 什么是Web服务器 服务器(我们也会称之为主机)是提供计算服务的设备,它也是一台计算机。在网络环境下,根据服务器提供的服务类型不…

C++构造函数和析构函数的调用顺序

一般情况下,调用析构函数的次序正好与调用构造函数的次序相反,也就是最先被调用的构造函数,其对应的析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。 当然对象的构造函数和析构函数调用时机和…

DRF的序列化【2】

【0】前提概要 【1】基于 View JsonResponse 编写的 5 个接口: 序列化自定义处理: 你需要自己编写序列化逻辑。处理 JSON 格式的 POST 请求数据: 从 request.body 中获取数据,并使用 json.loads() 解析成字典,然后创建相应的对象。request.…

JS基础:变量的详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获取…

基于51单片机NEC协议红外遥控发送接收proteus仿真设计

1.主要功能: 设计一个51单片机红外遥控发射接收proteus仿真设计 功能要求: 1、使用单片机模拟红外遥控器发射红外编码; 2、利用从机接收红外编码,并将编码以16进制显示到数码管上。 需注意仿真中51单片机芯片是兼容的&#x…

Web网页项目实战-----小兔鲜儿项目

本网站是一个电商网站,主要由Html、CSS、JS来完成,实现的功能主要是可以购买产品,展示产品,查看订单等功能,效果如下,如有需要项目代码的可以私信我,或者文章底下评论,我给分享原项目…

爬虫学习(2)破解百度翻译

代码 import requests import jsonif __name__ "__main__":url https://fanyi.baidu.com/sug#post请求参数处理(同get请求一致)headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …

【C语言】第一个C程序:hello world

printf简介 printf是C语言提供的库函数,可以在屏幕上打印格式化数据。这里不作展开,只需要知道,如果要打印hello world,就把双引号引起来的"hello world"作为参数传给printf就行了。如果想要在打印后换行,要…

【Linux】冯·诺依曼体系结构

要想谈进程,我们就不能只谈进程,我们如果想搞清楚什么是进程,就要从操作系统讲起。我们现在的不管是Linux或是Windows或是安卓等操作系统,它们都有一个相同点,那就是遵循冯诺依曼体系结构,我们看一下冯诺依…

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

ai写作工具推荐:如何用AI人工智能进行写作

AI写作工具:提升创作效率的秘密武器 在科技日新月异的今天,人工智能(AI)已经渗透到我们生活的方方面面,包括写作。AI写作工具,就是利用人工智能技术,帮助我们进行文本生成、语言优化等工作的工…

使用C语言实现杨氏矩阵并找出数字

前言 过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!! 今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。 首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中…

语音识别简介

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Android关于SparseArray面试题

问题1: 什么是SparseArray&#xff0c;它与HashMap有什么不同&#xff1f; 回答&#xff1a; SparseArray是一个用于优化特定情况下内存使用的数据结构&#xff0c;主要用于替代HashMap<Integer, Object>。SparseArray使用两个数组分别存储键和值&#xff0c;而不是使用…

最原理的一集——Mathtype公式编号设置(Mathtype7.8+Word)

版本 Mathtype7.8Office2019 Word 读完本文你将会 随心所欲&#xff0c;想怎么给公式编号就怎么给公式编号&#xff0c;想从(X.1)开始&#xff0c;就从(X.1)开始大概了解Mathtype公式设置原理给作者点赞 如果你想自己跟着文章做的话 请不要在自己的论文里边直接操作&#…

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…
最新文章