01嵌入式面经

华为嵌入式


stm32单片机和51单片机的区别

  1. 架构:

    • STM32单片机:基于ARM Cortex-M系列处理器,具有先进的32位处理能力和丰富的外设资源。
    • 51单片机:基于Intel 8051系列处理器,是一种经典的8位单片机,具有较为简单的指令集和功能。
  2. 位宽:

    • STM32单片机:是一种32位处理器,处理数据时一次可以处理32位数据。
    • 51单片机:是一种8位处理器,处理数据时一次只能处理8位数据。
  3. 性能:

    • STM32单片机:具有更高的性能,适用于处理复杂的任务和运行较大规模的程序。
    • 51单片机:性能较低,主要用于简单的嵌入式应用和低成本项目。
  4. 外设资源:

    • STM32单片机:拥有丰富的外设资源,包括多个通用定时器、串口、SPI、I2C、USB等,能够满足各种应用需求。
    • 51单片机:外设资源相对较少,通常包括定时器、串口、IO口等基本外设。
  5. 开发环境:

    • STM32单片机:常用的开发工具有Keil MDK、IAR Embedded Workbench等,支持C/C++编程,并提供丰富的软件库和示例代码。
    • 51单片机:常用的开发工具有Keil C51、SDCC等,也支持C语言编程,但相对STM32的开发工具较为简单。
  6. 成本:

    • STM32单片机:通常成本相对较高,但性能更强大,适用于需要较高性能的应用。
    • 51单片机:成本较低,适用于对成本敏感的项目或简单的应用场景。

flash,rom,ram,e2prom的用法和不同

| Flash存储器(闪存) | 主要用于存储程序代码、固件和其他持久性数据 | 可擦写、可编程、非易失性。它可以多次擦除和编程,通常具有较长的寿命。 | 常见于嵌入式系统中,用于存储操作系统、应用程序和固件。 |

| ROM(只读存储器) | 用于存储固定的数据,如启动代码、固件等,通常在制造过程中被编程,并且只能读取。 | 只读、非易失性。内容在生产过程中被设定,无法修改。 | 常见于存储系统启动代码、基本固件以及其他不需要修改的数据。 |

| RAM(随机存取存储器) | 主要用于存储程序运行时的数据、堆栈和临时变量。 | 可读写、易失性。内容在断电时会丢失,需要电源持续供电来保持数据 | 在嵌入式系统中用于临时存储数据、程序堆栈和动态分配内存。 |

| EEPROM(电可擦除可编程只读存储器) | 用于存储需要经常更新或修改的数据,如配置参数、校准数据等。 | 可擦写、可编程、非易失性。相比Flash,EEPROM通常有更快的擦写速度和更少的擦写次数限制。 | 常见于存储用户配置、设备参数、校准数据等需要经常更新的信息。 |

iic通信故障怎么排查?

  1. 确认物理连接: 检查I2C总线的物理连接,包括线缆、连接器和电气连接。确保线缆没有损坏、连接器插入良好,并且供电电压稳定。

  2. 确认设备地址: 确保每个I2C设备的地址设置正确,并且与程序中使用的地址一致。地址冲突可能导致通信失败。

  3. 确认时钟频率: 检查I2C时钟频率设置是否正确。时钟频率过高可能导致通信错误,可以尝试降低时钟频率。

  4. 检查电源供应: 确保所有I2C设备都正常供电,并且电源电压符合设备要求。电源问题可能导致通信错误或不稳定性。

  5. 逐个排查设备: 逐个排查连接的I2C设备,确认每个设备的工作状态。可以通过将设备断开并重新连接,然后测试每个设备是否能够正常通信。

  6. 逻辑分析器: 使用逻辑分析器或示波器监视I2C总线上的信号。通过观察时钟和数据线上的信号波形,可以确定是否存在通信问题,如时钟线是否正确工作、数据线上是否有数据传输等。

  7. 软件调试: 检查程序代码中的I2C通信部分,确保使用正确的I2C库函数、正确的寄存器配置和正确的通信协议。检查是否正确处理了ACK(应答)信号和错误情况。

  8. 电磁干扰(EMI): 检查周围环境中是否存在电磁干扰源,如电机、高频设备等。电磁干扰可能导致I2C通信错误或中断。

spi和iic适用场景对比

  1. SPI适用场景:

    • 高速数据传输: SPI通信速度较快,适合对速度要求较高的应用场景。
    • 短距离通信: SPI通常用于短距离通信,如在同一个PCB板上连接芯片。
    • 设备间并行通信: SPI支持主从模式,可以连接多个从设备,实现并行通信。
    • 单向通信需求: SPI通信一般是全双工的,但也可以实现单向通信,适用于不需要返回数据的情况。
  2. I2C适用场景:

    • 多设备连接: I2C支持多主机和多从机,适合连接多个设备的场景。
    • 中等速度传输: I2C通信速度较SPI略慢,但对于中等速度要求的应用仍然很有效。
    • 长距离通信: I2C通信可以在较长距离内传输数据,适用于设备之间距离较远的情况。
    • 低功耗: I2C在设备空闲时可以进入低功耗模式,有利于节能。

综合来看,SPI更适合短距离、高速、单向通信的应用,而I2C则更适合多设备连接、长距离通信、低功耗等场景

Linux内核中的信号响应过程如下:

  1. 信号发送: 当用户空间或内核中的进程调用kill系统调用或者发送信号给进程组时,信号被发送到目标进程。

  2. 信号到达目标进程: 内核接收到信号后,确定目标进程,并将信号传递给该进程。

  3. 信号递送: 内核首先检查目标进程的信号掩码,如果信号被阻塞,则该信号被阻塞且不递送给进程。如果信号未被阻塞,内核将调用目标进程的信号处理函数(如果已经注册了)来处理信号。

  4. 信号处理: 目标进程收到信号后,会执行与该信号相关联的信号处理函数。如果进程未注册信号处理函数,则根据信号的默认处理方式执行相应操作,比如终止进程、忽略信号等。

  5. 信号处理完成: 一旦信号处理函数执行完毕,控制权返回到目标进程的用户空间代码,继续执行原来的程序。

信号处理函数的处理方式

  1. 默认处理:

    • 每个信号都有一个默认的行为,这些行为可以是终止进程、忽略信号、停止进程或继续运行一个已停止的进程。例如,SIGKILL 和 SIGSTOP 信号的默认行为是不可被捕获或忽略,分别用于终止和停止进程。
  2. 忽略信号:

    • 进程可以显式地忽略某些信号(除了SIGKILL和SIGSTOP),这是通过将信号的处理函数设置为 SIG_IGN 实现的。当进程收到这样的信号时,内核简单地不采取任何行动。
  3. 捕获信号并处理:

    • 进程可以定义自己的信号处理函数,这些函数在信号到达时被调用。这是通过设置信号处理函数为用户定义的函数地址来实现的,通常使用sigaction()系统调用来设置。信号处理函数可以执行诸如清理资源、记录日志、发送通知等任务。
    • 使用sigaction()而不是较老的signal()函数进行信号处理设置,可以提供更多控制选项和更好的可移植性。
  4. 暂停并等待信号:

    • 进程可以使用如 pause()sigsuspend() 等系统调用暂停执行,直到接收到信号。这些调用通常用在需要进程等待外部事件的情况。
  5. 自动重启被信号中断的系统调用:

    • 使用sigaction()设置信号处理函数时,可以选择设置SA_RESTART标志,这使得由于信号到达而中断的某些系统调用会自动重启,而不是返回错误。

cache的作用

  1. 提高访问速度: 缓存存储了最近访问过的数据或指令的副本,当需要再次访问这些数据或指令时,可以直接从缓存中获取,而无需再次访问慢速的主存或磁盘。这样可以大大加快数据和指令的访问速度,提高系统的整体性能。

  2. 减轻主存和I/O负载: 缓存能够减轻主存和I/O设备的负载,因为它可以暂时存储一部分频繁访问的数据或指令。这样可以减少对主存和磁盘的访问次数,降低了系统对这些资源的竞争压力,提高了系统的整体吞吐量。

  3. 提高CPU利用率: 通过减少CPU等待主存或I/O设备的时间,缓存可以提高CPU的利用率,使CPU能够更有效地执行指令,从而提高系统的性能。

  4. 降低能耗: 缓存可以降低系统的能耗,因为它减少了对主存和磁盘的访问次数,从而减少了这些设备的功耗。此外,通过减少CPU等待时间,缓存还可以降低CPU的功耗。

  5. 提高响应速度: 缓存还可以提高系统的响应速度,因为它可以存储一些预先计算好的结果或常用的数据,使系统能够更快地响应用户的请求或操作。

进程(Process)和线程(Thread)

  1. 独立性:

    • 进程是程序的执行实例,每个进程拥有独立的地址空间,即每个进程都拥有自己的内存空间,彼此之间相互隔离。进程之间通常通过进程间通信(IPC)来进行数据交换和同步。
    • 线程是进程中的执行单元,多个线程共享同一个进程的地址空间,包括代码段、数据段和堆栈等。线程之间可以方便地共享数据和资源,但也需要注意同步和互斥的问题。
  2. 创建和销毁开销:

    • 创建和销毁进程的开销通常比线程大,因为进程拥有独立的地址空间和资源,需要进行资源的分配和初始化。
    • 创建和销毁线程的开销相对较小,因为线程共享进程的资源,只需要创建和销毁线程的控制块以及一些少量的线程私有数据。
  3. 切换开销:

    • 由于进程拥有独立的地址空间,进程切换(即从一个进程切换到另一个进程)的开销通常比线程切换大。进程切换需要保存和恢复进程的完整状态,包括内存映像、寄存器状态、打开的文件等。
    • 线程切换的开销相对较小,因为线程共享相同的地址空间,线程切换只需保存和恢复线程的寄存器状态即可。
  4. 通信和同步:

    • 进程之间通信较为复杂,通常需要使用特定的IPC机制(如管道、消息队列、信号量、共享内存等)来实现进程间的数据交换和同步。
    • 线程之间通信和同步相对简单,因为它们共享相同的地址空间,可以直接读写共享的数据,也可以使用线程同步机制(如互斥锁、条件变量、信号量等)来保护共享资源。

并发和并行的区别

并发是指多个任务在时间上可能交替执行,而并行是指多个任务在同一时刻同时执行

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

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

相关文章

SpringBoot+Vue+Element-UI实现学生综合成绩测评系统

前言介绍 学生成绩是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而学生所在学院多采用半手工管理学生成绩的方式,所以有必要开发学生综合成绩测评系…

MySql 空间索引

在 MySQL 中,直接对几何数据类型(如 POINT, LINESTRING, POLYGON 等)使用 "几何索引" 的概念并不完全准确,因为 MySQL 不直接提供名为 "几何索引" 的索引类型。但是,你可以为这些几何数据类型创建…

机器学习——2.损失函数loss

基本概念 损失函数也叫代价函数。损失函数就是计算预测结果和实际结果差距的函数,机器学习的过程就是试图将损失函数的值降到最小。 图左:|t_p - t_c| 图右:(t_p - t_c)**2 代码实…

图像分割入门-Unet++理论与实践

探索 U-net:改进的图像分割神经网络 引言 图像分割是计算机视觉领域中的重要任务,旨在将图像中的每个像素分配到特定的类别或区域。在许多应用中,如医学影像分析、自动驾驶和地块识别等领域,图像分割都扮演着关键角色。 U-net …

echars设置渐变颜色的方法

在我们日常的开发中,难免会遇到有需求,需要使用echars设置渐变的图表,如果我们需要设置给图表设置渐变颜色的话,我们只需要在 series 配置项中 添加相应的属性配置项即可。 方式一:colorStops type:‘lin…

基于EWT联合SVD去噪

一、代码原理 (1)基于EWT-SVD的信号去噪算法原理 经验小波变换(Empirical Wavelet Transform,EWT):EWT是一种基于信号局部特征的小波变换方法,能够更好地适应非线性和非平稳信号的特性。奇异值…

Maria DB 安装(含客户端),看这一篇就够了

文章目录 一 安装前准备1 版本与Win平台对应2 推荐安装 二 安装步骤1 安装主体程序2 添加系统路径Path 三 客户端 一 安装前准备 1 版本与Win平台对应 版本对应关系可参考: https://www.codebye.com/mariadb-deprecated-package-platforms.html。 2 推荐安装 经…

AI工具如何改变我们的工作与生活

AI工具在当今社会中扮演着越来越重要的角色,它们已经开始改变着我们的工作方式和生活方式。在接下来的2000字篇幅中,我将详细探讨AI工具如何影响我们的工作和生活。 AI工具在工作中的影响: 自动化和智能化生产流程: AI工具可以通…

嵌入式开发软件编码规范——C语言编码规范大全总结(规范开发,快乐你我他她它)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》

【driver1】内核模块,设备号,字符驱动

文章目录 1.内核模块:必须包含module.h2.内核模块参数:权限位S_IRUGO是用在sysfs文件系统里2.1 extern:声明来自另一个模块 3.设备号:主设备号对应驱动程序,具有相同主设备号设备使用相同驱动程序,次设备号…

程序员的实用神器

概述 在软件开发的海洋中,程序员们需要依赖一整套实用的工具和系统来指引、加速和优化他们的工作流程。我们从代码编写、版本控制到测试和部署罗列一些广泛认可的“神器”: 1. 代码编辑器和集成开发环境(IDE) - Visual Studio C…

cURL:命令行下的网络工具

序言 在当今互联网时代,我们经常需要与远程服务器通信,获取数据、发送请求或下载文件。在这些情况下,cURL 是一个强大而灵活的工具,它允许我们通过命令行进行各种类型的网络交互。本文将深入探讨 cURL 的基本用法以及一些高级功能…

linux中各类查看用户的命令(随手记)

在Linux系统中,查看用户信息的命令有很多,而且显示的内容各有各的区别: whoami: 显示当前用户的用户名。 whoamiid: 显示当前用户的UID、GID以及用户和组的名称。 idwho: 显示当前登录的所有用户的信息&…

详说及分享AI工具

现在的AI工具种类繁多,涵盖了多个领域,包括但不限于聊天机器人、搜索引擎、图像生成、写作辅助、音频处理等。以下是一些当前流行的AI工具及其优缺点,并尝试说明最喜欢和最好用的工具及其原因: ChatGPT: 优点&#x…

C++:特殊类的设计 | 单例模式

目录 1、特殊类的设计 2、设计一个类,不能被拷贝 3、设计一个类,只能在堆上创建对象 4、设计一个类,只能在栈上创建对象 5、设计一个类,不能被继承 6、单例模式 1、饿汉模式 2、懒汉模式 1、特殊类的设计 在实际应用场景中…

gateway基本配置详解

Spring Cloud Gateway 是 Spring Cloud 的一个组件,它基于 WebFlux 框架,用于构建 API 网关。API 网关是微服务架构中的一个重要组件,它作为系统的入口,负责处理客户端请求,并将请求路由到相应的服务。以下是 Spring C…

系统镜像地址

系统镜像 Linux 官网下载地址:Downloadhttps://www.centos.org/download/ 阿里云镜像下载地址:https://mirrors.aliyun.com/centos/https://mirrors.aliyun.com/centos/?spma2c6h.13651104.d-2001.6.6554320cwFqB8E 清华大学镜像下载地址&#xff1…

SCI一区 | WOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Matlab)

SCI一区 | WOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Matlab) 目录 SCI一区 | WOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现WOA-BiTCN-BiGRU-A…

【C++】学习笔记——list

文章目录 八、list1. list的介绍2. list的使用3. list的模拟实现4. list模拟实现的代码整合1. list.h2. test.cpp 未完待续 八、list list链接 1. list的介绍 是的, list 就是带头双向循环链表。 2. list的使用 通过 string 和 vector 的学习,我们差…

PT通过size vt修时序脚本

常用到mmmc的情况下通过synopsys的prime time的multisceanrio 模式提高fix 效率 以下内容仅供学习参考 ##start job:dsubjob pt_shell -multi_scenario -f setup_size_vt.tcl set date [exec date %m%d%H%M] set work_path setup_fixvt_${date} sh rm -rf ./$work/* set_hos…