技术拷问大杂烩
单片机
1、RAM和ROM的区别
RAM是 Random Access Memory 的缩写。随机存取存储器 ,掉电会丢失数据
SRAM是静态(S指的static)RAM,静态指的不需要刷新电路,数据不会丢失,SRAM速度非常快,是目前读写最快的存储设备了
DRAM是动态RAM,动态指的每隔一段时间就要刷新一次数据,才能保存数据,速度也比SRAM慢,不过它还是比任何的ROM都要快。
ROM只读存储器ROM Read Only Memory的缩写
掉电不丢失数据,容量大,价格便宜,存储速度不如RAM。
PROM:(Programmable ROM)可编程ROM,只能写一次,就不能再改变了。
EPROM:(Erasable Programmable Read Only Memory)可抹除可编程只读内存
抹除时将线路曝光于紫外线下,则资料可被清空,并且可重复使用。
EEPROM:(Electrically Erasable Programmable Read Only Memory)电子式可抹除可编程只读内存
运作原理类似EPROM,但是抹除的方式是使用高电场来完成,因此不需要透明窗。
FLASH:存储器又称闪存,它结合了ROM和RAM的长处
不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据。
2、IIC的工作原理
3、阐述了解的嵌入式实时操作系统?硬实时和软实时有那些
英文称Real Time Operating System,简称RTOS。
uc/OS
uc/OS能够在国内普及的很大一个原因是因为uc/OS比较早被介绍到中国
UCOSII是实时操作系统,所以它是以任务优先级作为调度原则。
> 实时操作系统:以任务优先级作为调度原则
> 分时操作系统:以时间片作为调度原则
硬实时操作系统:
要求系统必须在极严格的时间内完成实时任务。
硬实时操作系统的确定:超过截止时间计算出来的正确结果和错误的计算结果都是不能容忍的
因为事故已经发生了,结果再正确也没有什么用途了。
软实时操作系统:
系统完成实时任务的截止时间要求不是十分严格。
软实时操作系统对于计算机超时具有一定的容忍度,超过运行计算时间得到的运算结构不会完全没有用途,
只是这个结果的可信度要有某种程度的降低。
4、堆和栈有什么区别
1、管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;
2、空间大小不同。每个进程拥有的栈大小要远远小于堆大小。理论上,进程可申请的堆大小为虚拟内存大小,进程栈的大小 64bits 的Windows 默认 1MB,64bits 的 Linux 默认 10MB;
3、地址方向不同。堆的生长方向向上,内存地址由低到高(且地址容易错乱);栈的生长方向向下,内存地址由高到低。
4、存放内容不同。
栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。
堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。
堆(Heap)与栈(Stack),堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:
(1)、程序内存布局场景下,堆与栈表示两种内存管理方式;
栈区(stack):
自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈
int main() {
int b; //栈
char s[] = "abc"; //栈
char *p2; //栈
}
堆(Heap):
由开发人员分配和释放, 若开发人员不释放,程序结束时由 OS 回收,分配方式类似于链表。
int main() {
// C 中用 malloc() 函数申请
char* p1 = (char *)malloc(10);
cout<<(int*)p1<<endl; //输出:00000000003BA0C0
// 用 free() 函数释放
free(p1);
// C++ 中用 new 运算符申请
char* p2 = new char[10];
cout << (int*)p2 << endl; //输出:00000000003BA0C0
// 用 delete 运算符释放
delete[] p2;
}
(2)数据结构场景下,堆与栈表示两种常用的数据结构。
出处借鉴
写程序
1、写程序(允许使用伪代码),用2种方式实现产品的外部中断唤醒,对于产品睡眠唤醒功能,觉得有哪些需要注意的地方
2、写程序,通过单片机定时器编写年月日小时的定时
硬件
单极性和双极性晶体管
双极型晶体管也称晶体三极管,它是一种电流控制型器件,由输入电流控制输出电流
有两种不同极性的载流子(电子与空穴)同时参与导电,故称为双极型晶体管。
单极型晶体管也称场效应管。它是一种电压控制型器件,由输入电压产生的电场效应来控制输出电流的大小
只有一种极性的多数载流子(电子或空穴)参与导电,故称为单极型晶体管,如场效晶体管等。
Linux
1、阐述对Linux中的 system、popen、fork、vfork函数的理解
fork函数
fork函数是通过复制父进程来创建子进程(在当前进程中创建一个新的进程)
vfork函数
因为fork()操作会将当前进程的任何资源几乎完全复制一份,其中包括了地址空间。一般fork()调用后都会跟着调用execve(),用新的内存镜像取代原来的内存镜像,**当地址空间很大时,复制的操作会很费时,而且又是做无用功,所以就产生了vfork()**。
2、阐述常用的进程间的通信方式?
管道( pipe ):
> 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (named pipe) :
> 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量( semophore ) :
> 信号量是一个计数器,可以用来控制多个进程对共享资源的访
> 问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
信号 ( sinal ) :
> 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。