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.mzph.cn/bicheng/7329.shtml

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

相关文章

Altium Designer——检查原理图库正确性并生成报告

一、方法: 1.打开原理图库: 2.点击菜单栏的报告选项: 3.选择器件规则检查: 根据需求勾选,一般都是全部勾选: 二、问题: 1.缺少封装会导致什么问题: 1.首先: 封装是…

MWeb Pro for Mac:功能强大的Markdown博客编辑器

MWeb Pro for Mac是一款功能强大的Markdown博客编辑器,专为Mac用户设计,提供了一站式的博客写作和发布体验。这款软件不仅支持Markdown语法,还提供了丰富的编辑和排版功能,让用户能够轻松创建出精美的博客内容。 MWeb Pro的即时预…

信号量线程池读者写者模型

前言 大家好,我是jiantaoyab,本篇文章接着给大家介绍线程有关的信号量及线程池的基本理解。 信号量 在计算机中,信号量就是个 0 以上的整数值,当为 0 时表示己无可用信号 ,或者说条件不再允许,因此它表示…

重庆事业编5月7号开始报名⚠️报名照需审核

24年第二季度重庆事业编招聘 本次招聘实行网上报名。考生应按照招聘岗位要求,诚信、准确填写报考信息,并按网页提示上传电子材料(含电子登记照,jpg格式,20kb以下)。招聘方按照岗位报考要求,对考…

深度学习中的优化算法:选择现有的还是自创?

深度学习中的优化算法 深度学习中的优化算法:选择现有的还是自创?现有优化算法的优势**优点包括**: 开发新的优化算法的考虑**开发新算法的原因**:**开发新算法的风险**: 实用建议结论 深度学习中的优化算法&#xff1…

Mac跑llama.cpp过程中遇到的问题

原repo 在华为手机上安装termux、下载库:顺利在电脑上安装Android NDK:先下载Android Studio,再在里面下载Android SDK 安装Android Studio时,SDK的某些组件总是下载不成功。后来关了梯子、改了hosts,重新安装就成功了…

Ansible---自动化运维工具

一、Ansible概述 1.1 Ansible简介 Ansible是一款自动化运维工具,通过ssh对目标主机进行配置、应用部署、任务执行、编排调度等操作。它简化了复杂的环境管理和自动化任务,提高了工作效率和一致性,同时,Ansible的剧本(playbooks)…

53. 【Android教程】Socket 网络接口

Socket 网络接口 大家在学习计算机网络的时候一定学习过 TCP/IP 协议以及最经典的 OSI 七层结构,简单的回忆一下这 7 层结构: 从下到上依次是: 物理层数据链路层互联层网络层会话层表示层应用层 TCP/IP 协议对这 7 层了做一点精简&#xff…

三岁孩童被家养大型犬咬伤 额部撕脱伤达10公分

近期,一名被家养大型犬咬伤了面部的3岁小朋友,在被家人紧急送来西安国际医学中心医院,通过24小时急诊门诊简单救治后,转至整形外科,由主治医师李世龙为他实施了清创及缝合手术。 “患者额部撕脱伤面积约为10公分&…

Python3中Richdem包遇到问题

Python3中Richdem包遇到问题 文章目录 Python3中Richdem包遇到问题问题一报错解决 问题二报错解决 参考 问题一 报错 RichDEM 是一套数字高程模型 (DEM) 水文分析工具,这次打算用richdem进行地形分析,尝试在conda里面安装richde…

【华为】NAT的分类和实验配置

【华为】NAT的分类和实验配置 NAT产生的技术背景IP地址分类NAT技术原理NAT分类静态NAT动态NATNAPTEasy IP(PAT)NAT Server 配置拓扑静态NAT测试抓包 动态NAT测试抓包 NAPT测试抓包 PAT测试抓包 NAT Server检测抓包 PC1PC2服务器 NAT产生的技术背景 随着…

【管理篇】管理三步曲:团队建设(二)

目录标题 如何着手团队建设提升个人能力1、要提升员工的什么能力2、提升员工个人能力的初衷是什么?3、如何达成上述目标4、应该如何激发员工学习的动力和意愿呢5、关于提升员工的能力,有两个信念特别重要: 提升员工的工作意愿和积极性1、管理…

继承与组合

【一】什么是继承 继承就是创建新类的一种方式,这个新类可以继承一个或者多个其他类的属性 新的类如果有自己属性,那就叫派生 【二】继承的优点 可以继承父类的所有属性和方法,这样就可以实现代码去重。 【三】继承方式 单继承&#xff…

Spring与AI结合-spring boot3整合AI组件

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 spring ai简介 单独整合al接口 整合Spring AI组件 起步条件 ​编辑 进行必要配置 写在最后 写在前面 本文介绍了springboot开发后端服务中,AI组件(Spring A…

软件工程案例学习-图书管理系统-面向对象方法

文档编号:LMS_1 版 本 号:V1.0 ** ** ** ** ** ** 文档名称:需求分析规格说明书 项目名称:图书管理系统 项目负责人:计敏 胡杰 ** ** …

使用Docker安装MySql数据库

大家好,今天给大家分享一下如何使用docker安装MySql数据库,关于docker的安装和常用命令,大家可以参考下面两篇文章,本文中不做过多描述。 Docker在Windows与CentOS上的安装 Docker常用命令 一、拉取MySql数据库镜像 docker pul…

IIS部署vue项目 IIS重写URL

【第一步】安装IIS {1)打开控制面板 -> 打开程序和功能 -> 打开启用或关闭windows功能 (2)找到 Internet Information Services 勾选【web管理工具】和【万维网服务】,然后 确定 【第二步】安装URL重写模块 1). 安装URL …

2.开始学习C++

开始学习C 写在前面创建C程序1.输入输出2.main()函数3.头文件4.名称空间 C其他语句1.cin2.类3.函数4.自定义函数 写在前面 每次写读书笔记之前我都打算先写一会自己的心得,或者一些前情提要。先说说为什么要写这个读书心得吧。 首先是自己摆烂太久了,从…

C++ | Leetcode C++题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int m matrix.size();int n matrix[0].size();int flag_col0 false;for (int i 0; i < m; i) {if (!matrix[i][0]) {flag_col0 true;}for …

【笔试训练】day20

1.经此一役小红所向无敌 默认小红血量无限。直接计算出经过几轮攻击后&#xff0c;会出现人员伤亡。 对于对立来说他最多承受n轮光的攻击&#xff0c;对于光来说&#xff0c;他最多承受立得m轮攻击。 所以在经过min(n,m)轮回合之后&#xff0c;他们两个人至少死一个。活下来的…