深圳市航顺芯片技术研发有限公司
直播中

万航渡路

9年用户 1409经验值
擅长:电源/新能源
私信 关注
[问答]

在嵌入式中为什么要用到Linux系统呢

串行外设接口SPI是什么?
在嵌入式中为什么要用到Linux系统呢?

Cache常见的替换算法有哪几种呢?

回帖(1)

贾永世

2021-11-2 17:26:45
  1.SPI的四颗线:
  
  串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一
  4线SPI器件有四个信号
  时钟(SPLICK,SCLK)
  片选(CS)主机输出
  从机输入(MOSI)主机输入
  从机输出(MISO)
  2.I2C的两颗线:
  
  I2C总线是由飞利浦公司开发的一种简单、双向二进制同步串行总线
  它只需要两根线即可在连接于总线上的器件之间传送信息
  两条线如下:
  SDA(串行数据线):双向I/O线,需通过上拉电阻接电源VCC
  SCL(串行时钟线):总线空闲时,两根线都是高电平
  3.UART是什么的缩写
  通用异步收发传输器(Universal Asynchornous Receiver/Transmitter),通常称作UART
  它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被继承于其他通讯接口的连接上
  4.嵌入式中为什么要用到Linux系统
  (非准确答案,仅且只作为参考)
  开源!!!
  功能齐全,对于很多硬件设备都有丰富的驱动程序
  稳定!!!
  对于大多数芯片,都有裁剪的配置文件
  良好的移植性
  内核小
  内核可裁剪,多任务支持、多用户支持,性能高
  5.MIPS
  每秒处理的百万级的机器语言指令数(Million Instruction Per Second)
  这是衡量CPU速度的一个指标
  6.嵌入式板子大部份包含哪五个部分?
  (非准确答案,仅且只作为参考)
  运算器
  控制器
  存储器
  输入设备
  输出设备
  第二种答案:
  嵌入式微处理器
  存储器
  通用设备接口
  输入设备
  输出设备
  第三种答案:
  中央处理器
  存储器
  输入设备
  输出设备
  数据通道/总线
  7.什么是嵌入式的系统结构
  硬件层:嵌入式微处理器、存储器等
  中间层:将系统上层软件和底层硬件分离开来
  系统软件层:由RTOS、文件系统、GUI、网络系统及通用组件模块组成
  应用软件层:由基于实时系统开发的应用程序组成
  8.存储部分由哪三个部分组成?
  存储器芯片:存储数据位的物理存储体:存储器阵列,地址解码器,数据接口
  地址总线:根据从地址总线上接收到的信息,在存储器阵列中定位数据的地址
  数据总线:将要传送的数据提供到数据总线上
  9.DRAM和SRAM的特点和性质
  1.DRAM:动态随机存取存储器
  主要作用原理是利用电容内存储电荷的多寡来代表一个二进制bit
  特点:集成度高,主要用于大容量存储器,只能将数据保持很短的时间,必须隔一段时间刷新一次
  2.SRAM:静态随机存储存储器
  它是一种具有静止存取功能的内存
  特点:不需要刷新电路即可保存它内部存储的数据,故它具有较高的性能,但集成度较低
  10.Cache的替换
  Cache工作原理要求它尽量保存最新数据,当从主存向Cache传送一个新块,而Cache中可用位置已被占满时,就会产生Cache替换的问题。替换问题与Cache的组织方式紧密相关:对直接映射Cache来说,只要把此可用位置上的主存块换出Cache即可;对全相联和组相联Cache来说,要从若干个可用位置中选取一个位置,把其中的主存块换出Cache
  常见的替换算法如下三种:
  最不经常使用(LFU)算法:算法将一段时间内被访问次数最少的那个块替换出去。每块设置一个计数器,从0开始计数,每访问一次,被访块的计数器就增1。当需要替换时,将计数值最小的块换出,同时将所有块的计数器都清零。
  近期最少使用(LRU)算法:算法是把CPU近期最少使用的块替换出去。这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。每块也设置一个计数器,Cache每命中一次,命中块计数器清零,其他各块计数器增1。当需要替换时,将计数值最大的块换出。
  最近未使用算法(NRU):最近未被使用页面置换算法,性能不是最优,又称为近似的LRU算法。每个页面有两个位:R位(标识最近是否被访问)和M位(标识最近是否被修改),初始时均为0。一旦因为访问发生缺页中断,则设置R位为1;一旦因为修改发生缺页中断,则设置M位为1。此外R随着时钟周期被定期地清零,以区别最近是否被访问,不把M清零是为了决定是否写回磁盘。
  最佳替换算法:每个页面用该页面首次被访问前需要执行的指令数作为标记,每次缺页中断发生时,替换掉标记最大的页面(即:所有内存页面中最迟将被使用的)。作为评价标准,它是理想算法不可实现:每次缺页中断发生时,操作系统不知道各个页面将在什么时候被访问。
  随机替换算法:最简单的替换算法是随机替换。随机替换算法完全不管Cache的情况,简单地根据一个随机数选择一块替换出去。随机替换算法在硬件上容易实现,且速度也比前两种算法快。缺点则是降低了命中率和Cache工作效率
  先入先出(FIFO):遵循先入先出原则,若cache被填满,则替换最早进入cache的那个
  第二次机会算法:第二次机会算法的基本思想是与FIFO相同的,但是有所改进,避免把经常使用的页面置换出去。当选择置换页面时,依然和FIFO一样,选择最早置入内存的页面。但是二次机会法还设置了一个访问状态位。所以还要检查页面的的访问位。
  时钟算法:现实的
  11.Cache的三种连接方式
  直接映射(✳不需要替换策略✳):在cache中为主存中每个字分配一个位置的最简单方法就是根据这个字的主存地址进行分配,这种cache结构称为直接映射。其中,每个存储器地址对应到cache中一个确定的地址。
  全相联映射:全相联映射方式比较灵活,主存的各块可以映射到Cache的任一块中,Cache的利用率高,块冲突概率低,只要淘汰Cache中的某一块,即可调入主存的任一块。但是,由于Cache比较电路的设计和实现比较困难,这种方式只适合于小容量Cache采用。
  组相联映射:主存和Cache都分组,主存中一个组内的块数与Cache中的分组数相同,组间采用直接映射,组内采用全相联映射。也就是说,将Cache分成2u组,每组包含2v块,主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。即主存的某块只能映射到Cache的特定组中的任意一块。主存的某块b与Cache的组k之间满足以下关系:k=b%(2^u)。
  12.CISC RISC
  CISC(Complex Instruction Set Computer):复杂指令集计算机
  是一种微处理器指令集架构,每个指令可执行若干低端操作,诸如从存储器读取、存储和计算操作,全部集中于单一指令之中,与之相对的式精简指令集
  RISC:精简指令集计算机
  13.TPU、GPU、CMP、SMT
  TPU:热塑性聚氨酯弹性体(误),(Tensor Processing Unit)张量处理单元泛指张量处理器,是一颗控制芯片,通过这颗芯片可以在不占用CPU性能的基础上对CPU通过硬件控制的方式进行超频,是专门为机器学习(custom ASIC specifically for machine learning)设计的专用集成电路,它使得机器学习类深度神经网络模型在每瓦特性能性能支撑上优于传统硬件
  GPU:(Graphic Processing Unit)图形处理单元泛指图形处理器,是图形专用核心处理器,是显示卡的“大脑”,决定了该显卡的档次和主要性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能
  CMP:(Chip multiprocessors)单芯片多处理器,CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。与CMP比较, SMT处理器结构的灵活性比较突出。但是,当半导体工艺进入0.18微米以后,线延时已经超过了门延迟,要求微处理器的设计通过划分许多规模更小、局部性更好的基本单元结构来进行。相比之下,由于CMP结构已经被划分成多个处理器核来设计,每个核都比较简单,有利于优化设计,因此更有发展前途。目前,IBM 的Power 4芯片和Sun的 MAJC5200芯片都采用了CMP结构。多核处理器可以在处理器内部共享缓存,提高缓存利用率,同时简化多处理器系统设计的复杂度。
  SMT:(Simultaneous Multi-Threading)同时多线程,标量技术与多线程技术的充分协同与结合,可以解决影响处理器性能的诸多难题
  14.RISC-V
  是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),(开源指令集且指令长度可变)
  15.USB和RS-232哪个快? :====D;
  USB:(You ShaBi)(Universal Serial Bus),通用串行总线,是一个外部总线的标准,用于规范电脑与外部设备的连接和通讯。
  RS-232:是常用的串行通信接口标准之一(长得和vga挺像的)
  RS-232应用范围广泛、价格便宜、编程容易并且可以比其它接口使用更长的导线,随着USB端口的越来越普遍,将会出现更多的把USB转换成RS-232或其它接口的转换装置。但是RS-232和类似的接口仍将在诸如监视和控制系统这样的应用中得到普遍的应用。
  USB比RS232快到不知道到哪里去了
  USB1.0:192kb/s
  USB1.1:1.5MB/s
  USB2.0:60MB/s
  USB3.0:640MB/s
  RS-232规定的最高速率只有:38400bit/s(约为4kb/s)
  USB可以热拔插:即带电插拔,热插拔功能就是允许用户在不关闭系统,不切断电源的情况下取出和更换损坏的硬盘、电源或板卡等部件
  USB可以插反吗?
  Type-A与Type-B不可以插反,并且接口有防呆设计
  Type-C可以插反
  16.计算数据的传输速率?(与计组填空相同)
  bps:比特/秒(比特率) T(周期)=1/f(频率)
  假设总线的时钟频率为100MHz,总线的传输周期为4个时钟周期,总线的宽度为32位,试求总线的数据传输率,若想提高一倍数据传输率,可采用什么措施?
  解:根据总线时钟频率为100MHz,得
  1个时钟周期为1/100MHz = 0.01μs
  总线传输周期为0.01μs*4=0.04μs
  由总线宽度32位(4字节)
  总线数据传输率为4B/0.04μs=100MBps,若要提高一倍数据传输率,可以将宽度变为64位,或时钟频率增加到200MHz
  17.树莓派用的是ARM吗?
  使用的是ARM指令集
  ARM体系结构目前被公认为是业界领先的32 位嵌入式RISC(精简指令集计算机) 微处理器结构。 所有ARM处理器共享这一体系结构。
  18.嵌入式开发中都需要有OS吗?
  嵌入式开发中操作系统并不总是必须的,因为程序完全可以在裸板上运行。尽管如此,但对于复杂的系统,为使其具有任务管理、定时器管理、存储器管理、资源管理、事件管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好地分配系统资源的功能,很有必要针对特定的硬件平台和实际应用移植操作系统。Linux操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小、可裁减、运行速度高、良好的网络性能等优点,可以作为嵌入式操作系统。
  19.先有PCB还是原理图?
  先有原理图再有PCB图
  20.JTAG是干什么用的
  JTAG:(Joint Test Action Group) 联合测试工作组,是一种国际标准测试协议,主要用于芯片内部测试
  21.Arduino
  Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)
  主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
  大题部分:
  1.分析题(参考分析硬件软件的结构)
  需要会画软件流程图,选择好硬件的搭配,如处理器类型、传感器、外设等
  2.编程题
  1.makefile
  gcc用法:
  预处理:gcc -E test.c -o test.i
  编译为汇编代码:gcc -S test.i -o test.s
  汇编:gcc -c test.s -o test.o
  连接:gcc test.o -o test
  执行:sudo 。/test
  编写makefile的规则:
  目标 : 需要的条件 (注意冒号两边有空格)
   命令 (注意前面用tab开头)
  以实验1中为例 main.c文件在。/calc/main.c
  main : main.o //冒号前后可以自定义命名,冒号前为连接名,但注意,冒号后的名字必须为存在的文件名或是makefile中存在的廉介面
  gcc obj/main.o -o obj/main
  main.o : main.s
  gcc -c obj/main.s -o obj/main.o
  main.s : main.i
  gcc -S obj/main.i -o obj/main.s
  main.i : main.c //可以不写
  gcc -E calc/main.c -o obj/main.i
  2.盲猜实验二编程题
  实验二需要wiringPi.h库
  他是一个树莓派IO控制库,使用c语言,提供了丰富的接口
  具体的接口号定义如下(此图是40pin引脚的版本):
  
  #include《stdio.h》
  #include《wiringPi.h》
  int main(void) {
  wiringPiSetup();
  //使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16
  //需要root权限
  pinMode(1, OUTPUT);
  //配置引脚的IO模式
  //第一个参数为pin,配置的引脚
  //第二个参数为mode,设定引脚的IO模式
  //这里设置1号引脚为output模式
  for (;;)
  {
  digitalWrite(1, HIGH); delay(500); // 灯亮0.5s
  //digitalWrite函数让对一个已近配置为输出模式的 引脚 输出指定的电平信号
  //第一个参数传的为引脚号
  //第二个传入的是高低电平,只有两个值HIGH和LOW
  digitalWrite(1, LOW); delay(500); // 灯灭0.5s
  //delay函数作用为阻塞等待,传入参数的单位为毫秒
  }
  return 0;
  }
  #include《stdio.h》
  #include《wiringPi.h》
  #define LED 0
  #define BUTTON 3
  int main(void) {
  wiringPiSetup();
  pinMode(LED, OUTPUT);
  //灯为输出模式
  pinMode(BUTTON, INPUT);
  //按钮为输入模式,需要获取按钮的状态
  pullUpDnControl(BUTTON, PUD_UP);
  //函数作用为对一个设置IO模式为 INPUT 的输入引脚设置拉电阻模式
  //PUD-OFF 关闭拉电阻 PUD_DOWN 引脚电平拉到3.3v PUD_UP引脚电平拉到0v接地
  int tag = 0; // 标记灯状态
  for (;;) {
  if (digitalRead(BUTTON) == LOW) {
  //读取一个引脚的电平值 LOW HIGH ,返回
  // 切换灯状态
  if (tag == 0) {
  tag = 1;
  }
  else {
  tag = 0;
  }
  printf(“LED STATUS IS CHANGEDn”);
  delay(1000);
  }
  if (tag == 0) {
  digitalWrite(LED, LOW);
  //LED转变状态
  }
  else {
  digitalWrite(LED, HIGH);
  //LED转变状态
  }
  delay(1);
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分