嵌入式基础(二)ARM基础

1.精简指令集和复杂指令集的区别⭐⭐⭐

精简指令集 (RISC)

  • 精简指令集 (Reduced Instruction Set Computing) 具有简洁、精简的指令集,每条指令执行的操作都很基础,使得处理器设计更简单。
  • RISC 处理器通常需要更多的指令来完成复杂的操作,但每条指令执行的时间相对较短。
  • 采用固定长度的指令格式,简化了指令译码的工作,提高了流水线执行效率。
  • RISC 处理器倾向于通过增加寄存器数量来加速运算,以减少内存访问的频率。

复杂指令集 (CISC)

  • 复杂指令集 (Complex Instruction Set Computing) 包含大量复杂的指令,每条指令可以完成更多的工作,包括访存、运算等。
  • CISC 处理器的指令通常更多样化,能够在一条指令内完成复杂的操作,因此每次执行的指令数较少。
  • 具有可变长度的指令格式,使得指令译码较为复杂,执行速度可能会受到影响。
  • CISC 处理器在设计上倾向于通过多种复杂的指令来减少内存访问次数,以提高程序的执行效率。

精简指令集和复杂指令集对比:

指令数量

较多

较少

指令复杂度

简单

复杂

指令执行时间

指令格式

固定长度

可变长度

寄存器的作用

重要,减少内存访问

相对不太重要

2.什么是DMA⭐⭐⭐⭐

什么是DMA

DMA(Direct Memory Access,直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU,在这个时间中,CPU对于内存的工作来说就无法使用。简单来说就是一个数据搬运工。

DMA的意义主要体现在以下几个方面:

  1. 代替CPU搬运数据,为CPU减负:数据搬运是一个耗时的任务,如果由CPU来执行数据传输操作,会占据CPU的大量时间和计算资源。通过利用DMA机制,外部设备可以直接与内存进行数据传输,无需CPU的参与,从而减轻了CPU的负担,使其能够专注于执行其他更重要的任务。
  2. 数据搬运工作时效要求高:某些场景下,数据的及时传输非常重要,例如实时流媒体、快速数据采集等应用。DMA能够以高效率和高速度进行数据传输,满足对数据及时性的要求。
  3. 数据搬运任务缺乏技术含量:相比于其他计算任务,数据搬运任务相对简单,缺乏复杂的计算和逻辑操作。通过将数据搬运任务交给DMA执行,CPU可以节省出宝贵的时间和资源,用于执行更具技术含量的计算和处理任务。

DMA搬运数据

1.搬运什么数据

搬运存储器、外设的数据:

外设指的是spi、usart、iic、adc 等基于APB1 、APB2或AHB时钟的外设。

存储器包括自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问地源或者目的。

2.从哪里搬到哪里

1.存储器→存储器(例如:复制某特别大的数据buf)

2.存储器→外设 (例如:将某数据buf写入串口TDR寄存器)

3.外设→存储器 (例如:将串口RDR寄存器写入某数据buf)

3.说说你了解有哪些存储器类型⭐⭐⭐

存储器类型

描述

内存 (RAM)

临时存储数据和程序的主要存储器类型。包括DRAM和SRAM。

只读存储器(ROM)

存储固定数据,如固件和BIOS。

快闪存储器(Flash Memory)

在断电的情况下可以存储数据。常用于SSD和便携设备。

磁盘存储器(Disk Storage)

长期数据存储,包括硬盘驱动器(HDD)和固态硬盘(SSD)。

Cache 存储器

加速访问主存储器中的数据的存储器,包括CPU缓存和磁盘缓存等。

存储介质

长期数据备份和存档,包括磁带、光盘等。

4.FreeRTOS、uCOS的区别⭐⭐

FreeRTOS和uC/OS是两种实时操作系统(RTOS),用于嵌入式系统开发。它们有一些显著的区别,包括以下方面:

FreeRTOS:

  • 具有免费开源的版本,可自由使用和定制。
  • 任务调度:FreeRTOS使用基于优先级的抢占式调度策略,具有较低的上下文切换开销。
  • 内核对象:FreeRTOS提供一些基本的内核对象,如任务、队列和定时器等,具有相对简单的功能。
  • 内存管理:可以选择静态内存分配或动态内存分配,可根据需求进行配置。
  • 社区支持:具有活跃的社区支持,频繁进行更新和改进。

uC/OS:

  • 提供免费和商业版本,商业版本提供额外的功能和支持。
  • 任务调度:可配置为抢占式或协作式调度,灵活适应不同应用需求。
  • 内核对象:提供丰富的内核对象,例如任务、信号量、邮箱、互斥锁等,功能更为全面。
  • 内存管理:需要使用外部内存管理功能,用户可以根据需求选择适当的内存管理机制。
  • 社区支持:社区相对

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

c++/嵌入式面经专栏 文章被收录于专栏

BG双9,目前在某外企。打算把之前校招时做的笔记通过专栏发出来,本专栏适合于C/C++、嵌入式方向就业的同学,本篇面经总结数千篇面经的知识集合,实时更新全网最新的嵌入式/C++最新内容,囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,在我看来这些是求职者在面试中必须掌握的知识点。最后呢祝各位能找到自己合适的工作。

全部评论
打卡打卡
3 回复 分享
发布于 2024-02-21 11:08 四川
打卡
点赞 回复 分享
发布于 2024-05-08 11:11 内蒙古
打卡
点赞 回复 分享
发布于 2024-07-15 10:45 四川
打卡
点赞 回复 分享
发布于 02-07 10:48 湖南

相关推荐

小覃1:硕士了还投助理岗位吗,一般不都直接干工程师了吗
点赞 评论 收藏
分享
会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务