嵌入式面试题之单片机知识

单片机IO口开漏输出和推挽输出有什么区别?

推挽输出:既可以输出低电平,也可以输出高电平,可以直接驱动功耗不大的数字器件。导通损耗小、效率高、既提高电路的负载能力,又提高开关速度。
开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)

单片机里定时器有什么作用和优势?

1.可以用做精确延时处理,比较延时1ms时间
2.可以当做计数器,比如将这个功能IO口接到一个时钟源,可以统计有多少个脉冲信号
3.输入捕获(解码和测量时间间隔)
4.输出比较(主要输出PWM波)、单脉冲输出
5.触发中断(对其他模块进行操作)

单片机定时器的优势:不需要CPU参与,精确

什么是码元?

答:在信息传输通道中,携带数据信息的信号单元叫码元

什么是波特率?

答:每秒钟通过信道传输的码元数称为码元传输速率,波特率。单位是Baud

比特率和波特率的区别?

比特率:指每秒钟通过信道传输的信号量,即每秒钟传送的二进制位数,通过不同的调制方式,可以在一个码元符号上负载多个bit位信息

什么是RAM?

RAM又被称为“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)

RAM分为很多种,关于SRAM、DDR、SDRAM、PSRAM,本文从软件的角度笼统一点分为片内和片外RAM,对于软件工程师来说,它们的区别就是访问速度,大体上片内的访问速度是片外RAM的1.5-2倍,片内RAM集成在CPU芯片内部,一般只有几十K字节,一般用来存放中断处理Handler、RTOS调度器、任务上下文切换、内存分配释放等使用频率最高的代码和中断堆栈这种读写频率极高的内存区,如果有多余的部分也可以放一些经常被引用到的全局变量。片外RAM一般就是采购市面上的成品如Samsung,Hynix,Apmemory等,价格相对便宜,其容量的可选范围也较为宽松,从几M到几G的都有,它可以用来存储全局变量,bss,以及我们常用到的malloc所分配的堆空间等。

什么是ROM?

答:ROM又被称为“只读存储器”,ROM所存数据,一般是装入整机前实现写好的,整机过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变。

RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。

RO段应该放在ROM里,DATA段放在RAM里,对于DATA、BSS,这些段因为有频繁的写操作所以肯定要放在RAM里,但是只读数据(包括代码段)必须放在ROM里吗?答案是不一定。

ROM一般是有两种,一种是指集成在CPU芯片内部的一块只读存储区域,一般是几K到几十K字节大小,用来存储系统刚上电时对CPU和一些核心外设(如时钟,串口,MMU、DRAM、Flash等)进行初始化的代码,它在程序运行中也是不可写的,要对它执行写操作只能使用硬件烧写器进行,也就是一般所说的下载程序,这部分的代码在芯片测试阶段可以进行编程器下载更新,量产后一般就会固化,不能做任何修改的

ROM另一种指的就是flash。首先需要说明的是,很多做嵌入式应用开发的同学一直把flash比作PC上的硬盘,其实它们指的是Nand flash,而对于很多小型的嵌入式系统,就只有一个2M或者4M的Nor Flash,它和硬盘有一个显著的区别:flash里存放的代码是可以由CPU直接取指并执行的,而PC上硬盘里的程序都需要加载到内存里才能运行。flash并不是绝对的运行时不可写,有时候应用程序需要保存一些配置信息到flash里,类似于PC程序的配置文件,以保证掉电了之后它的内容不会丢失,下次开机时可以直接从flash读取到。不过,flash的写操作要比RAM麻烦的多了,flash在写之前需要发送多个命令字来握手,还要先对即将要写的地址所在的扇区进行整体擦除,就是把该扇区里的内容全设为1,所谓写flash就是把其中的一些bit设为0;更要命的是,flash的每个独立bit位的写次数是有上限的,市面上大部分的产品都只能写10~100万次。多说一句,每个bit位的寿命是独立的,如果一个bit位在擦除和写的动作中,它的值始终为1,则不会有影响;例如反复对一个地址写0xF0,则不会影响高4bit的寿命,而低4bit每次都要先擦成1,再写入0,这样就会降低其寿命。
目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势)

首先考虑一下,有没有什么东西必须放在ROM里? 当然有,引导程序(系统的初始化代码)就必须放到ROM里。在CPU刚上电时,只能去一个默认的地址去取第一条指令,开始干活,这个地址都是映射到片内的ROM里,原因很简单,此时,作为外设的flash和DDR等都还没有初始化,CPU根本无法从它们那里读写数据,片内ROM里的这些代码就需要完成这些模块的初始化。另外,一个项目的处理器和主要外设确定了以后,这部分初始化代码在很长的时间里,都不需要做任何修改的。

那有没有什么东西必须放RAM里?当然也有,应用程序经常读写的全局变量,堆、栈等等,都需要放在RAM里,根据访问的频率,将频率最高的少量数据放到片内ram。

只读数据(代码段、程序里的const、字符串等)一般来说,这些数据应该放在Flash里,因为它们不需要被修改,而且前面提到过,rom要比ram便宜的多。可能有人会有疑问,放在flash里,会不会读取的速度很慢?读ROM的速度是比读RAM的数据要慢一点,但是不要忘了,现代CPU都有强大的cache,而且数据Dcache和指令Icache都是分开的,在系统运行中,cache的命中率可以高达80~90%,所以大部分时候CPU都可以在第一时间就拿到想要的指令和数据。

那么结论就出来啦:
1、RAM与ROM其实都是内存
2、硬盘是外存
3、ROM不等于硬盘
4一般而言 数据放RAM代码放ROM。(这里多说一句,RAM在系统刚上电的时候,其内容是随机的。所谓的数据、代码放在RAM里,是指在初始化时,CPU从flash里读下载的bin文件,也有的平台下载的是hex文件,找出其中的ram段,以类似于memcpy的方式将数据从bin文件里的对应位置拷贝到RAM映射到的物理地址里,这才是所谓的放在RAM里)

扇区 块 页 簇的概念

扇区,顾名思义,每个磁盘有多条同心圆似的的磁道,磁道被分割成多个部分。每部分的弧长加上到圆心的两个半径,恰好形成一个扇区,所以叫做扇区。扇区是磁盘中最小的物理储存单位。通常情况下每个扇区的大小是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)

或者可以包括2的n次方个扇区

是操作系统中最小的逻辑存储单位,操作系统与磁盘/硬盘打交道的最小单位是磁盘块。硬盘的读写以扇区为基本单位

:内存的最小存储单位,页的大小为磁盘块大小的2的n倍;操作系统与内存打交道的最小单位是页

你可能感兴趣的:(1024程序员节)