嵌入式知识技能——面试题

5 篇文章 0 订阅
2 篇文章 0 订阅
1.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里。

答:程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区。

2.关键字const有什么含义?

答:

1)只读。

2)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。

3.do……while和while有什么区别?

答:前一个循环一遍再判断,后一个判断以后再循环。

4.请问以下代码有什么问题:
int main() 
{
  char a;
  char *str = &a;
  strcpy(str,"hello");
  printf(str);
  return 0;
}


答:没有为str分配内存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

5.已知一个数组table,用一个宏定义,求出数据的元素个数

答:#define NTBL (sizeof(table)/sizeof(table[0]))

6.引用与指针有什么区别?

答:

1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。

引用解释·:

错误形式:(引用的类型必须和其所绑定的变量的类型相同)

1 #include<iostream>
2 using namespace std;
3 int main(){
4     double a=10.3;
5     int &b=a; //错误,引用的类型必须和其所绑定的变量的类型相同
6     cout<<b<<endl;
7 }

错误形式:(声明引用的同时必须对其初始化) 

1 #include<iostream>
2 using namespace std;
3 int main(){
4     int &a; //错误!声明引用的同时必须对其初始化
5     return 0;
6 }

对数组的引用:(语法:类型 (&引用名)[数组中元素数量]=数组名;) 

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int a[3]={1,2,3};
 5     int (&b)[3]=a;//对数组的引用 
 6     cout<<&a[0]<<" "<<&b[0]<<endl;
 7     cout<<&a[1]<<" "<<&b[1]<<endl;
 8     cout<<&a[2]<<" "<<&b[2]<<endl;
 9     return 0;
10 }

对指针的引用:(语法:类型 *&引用名=指针名;//可以理解为:(类型*) &引用名=指针名,即将指针的类型当成类型*) 

1 #include<iostream>
2 using namespace std;
3 int main(){
4     int a=10;
5     int *ptr=&a;
6     int *&new_ptr=ptr;
7     cout<<&ptr<<" "<<&new_ptr<<endl;
8     return 0; 
9 }
7.产生死锁的原因是什么?

答:多个并发进程因争夺系统资源而产生相互等待的现象。即:一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。

产生死锁的本质原因为:

1)系统资源有限。

2)进程推进顺序不合理。

8、嵌入式微处理器的分类(根据用途)

(1)嵌入式微控制器(MCU):又称为单片机,片上外设资源一般比较丰富,适合于控制。最大的特点是单片化,体积小,功耗和成本低,可靠性高。目前约占70%的市场份额。

(2)嵌入式微处理器(EMPU):又称为单板机,由通用计算机中的CPU发展而来,它的特征是具有32位以上的处理器,具有较高的性能。通常嵌入式微处理器把CPU、ROM、RAM及I/O等模块做到同一个芯片上。

(3)嵌入式DSP处理器(DSP):专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,使其处理速度比最快的CPU还快10~50倍,在数字滤波、FFT、频谱分析等方面获得了大量的应用。

(4)嵌入式片上系统(SOC):追求产品系统最大包容的集成器件,其最大的特点是成功实现了软硬件的无缝结合,直接在微处理器片内嵌入操作系统的代码模块。

9.ARM的存储方法

A、大端模式:数据的高字节存储在低地址中,低字节存储在高地址中。

B、小端模式:数据的低字节存储在低地址中,高字节存储在高地址中。

有了上面的解释,大小端的实例就很好理解了:

10.嵌入式系统中常用的通信接口有哪些?

UART: 通用异步收发传输器。

USART: 通用同步/异步串行接收/发送器。USART可以理解为UART和USRT二合一的通信接口,一个是同步通信,一个是异步通信。

IIC: 集成电路总线,是一种串行通信总线。

SPI: 串行外设接口,是一种高速的,全双工,同步的通信总线。

QSPI: 是SPI接口的扩展,比SPI应用更加广泛。QSPI是在SPI协议的基础上,对其增加了队列传输机制,传输过程不需要CPU干预,极大的提高了传输效率。

RS-232: 全双工点对点式的异步串行通信协议接口。

RS-485: 串行通信总线,采用两线制,差分传输,半双工模式。

RS-422: 采用四线制,全双工,差分传输,多点通信的数据传输协议。

USB: 通用串行总线 。USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,是应用在PC领域的接口技术。

CAN: 控制器局域网络。 CAN 总线是一种应用广泛的现场总线 ,在工业测控和工业自动化等领域有很大的应用前景。

IRDA: 是一种利用红外线进行通信的,点对点通信的技术。

11. 什么是实时操作系统(RTOS)?

从嵌入式系统的应用领域来看,嵌入式操作系统可以分为实时操作系统(RTOS)和非实时操作系统(NRTOS)。

 定义是一种为实时应用程序提供服务的操作系统。

相较于通用的分时操作系统(Linux、Windows、Unix等),RTOS有着仅适用于嵌入式应用程序、基于时间片调度、抢占式内核等特点,其中断延迟可达到以微秒为单位。

RTOS根据任务时效性可分为硬实时、固定实时、软实时三种大类。

RTOS有着下列优点:

1、RTOS会基于优先级进行任务调度,优先处理更加重要的进程;

2、RTOS提供API(Application Programming Interface,应用编程接口)功能,使应用程序代码更简洁;

3、抽象时序依赖性和基于任务的设计减少了模块之间的相互依赖性;

4、RTOS提供基于任务的模块化开发,可进行基于任务的模块化测试;

5、基于任务的API模式是模块化的,团队分工得以更加明确。

6、RTOS由事件驱动,不会造成性能浪费。

12、嵌入式软件开发的流程:


1、明确需求,确定设计目标;
2、准备软件测试时需要用到的资源,比如开发环境、开发工具、测试设备等;
3、规划任务、时间和人员,制定详细项目进度表,确定模块负责人员;
4、系统结构的设计,软硬件选择;
5、程序设计,程序进程的编写、软件的模拟运行和调试;
6、测试与验收,对模块、整机的功能测试、可靠性测试,如果发现问题及时的进行调试和修改,调试无误后与客户进行对接验收;
7、后期的维护和升级工作。

13.RTC实时时钟驱动
  1. RTC实时时钟为操作系统提供一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去。
  2. 实时时钟(RTC)单元可以在系统电源关半闭的情况下依靠备用电池工作,一般主板上都有一个纽扣电池作为实时时钟的电源。
  3. RTC可以通过使用STRB/LDDRB这两个ARM指令向CPU传递8位数据(BCD码)。数据包括秒、分、小时、日期、天、月、和年。
  4. RTC实时时钟依靠一个外部的32.768kHZ的石晶体,产生周期性的脉冲信号。每一个脉冲信号到来时,计数器就加1,通过这种方式,完成计时功能。
14.什么是嵌入式系统?

嵌入式,它是一种嵌入在设备或者系统内部的,它的存在是为了某种特定功能应用而设计开发的计算机系统.

广泛上讲,凡是带有微处理器的专用硬软件系统,都可以称之为嵌入式系统。

15.嵌入式系统有哪些组成?

(1)微处理器(CPU,中央处理器),整个系统的控制指挥中心,

(2)存储器,也就是记忆单元,存储器种类很多,EEPROM、DRAM、Flash ROM等。

(3)输入输出接口和输入输出设备;如LCD,LED,打印机,光传感器,键盘,鼠标等无非区分为人机交互,机机交互。

(4)总线,三大总线,数据总线DB(Date Bus),地址总线AB(Address Bus),控制总线CB(Control Bus),用于微机系统内部信息传递,成为内部总线。

 嵌入式软件配置有多种情况,低端的嵌入式软件相对简单,只需配置监控程序,驱动程序,事件处理程序即可。而高端的嵌入式系统,其软件复杂,通常由板级支持包(BSP)、设备驱动程序还要考虑到实时操作系统,软件架构等。

16.& 和 && 两个运算符的区别是什么

& 是位运算符,表示按位与运算;&&是逻辑运算符(短路运算符),表示逻辑与运算,&&符的运算效率更高;
按位与的运算规则:当两个整数进行按位与运算时,如果对应位都是1,则为1,否则,结果为0;如果参与运算的两个数精度不同,则结果转换为精度较高的数据类型。如下:
整数 3 的二进制表示为: 00000000 00000000 00000000 00000011
整数 6 的二进制表示为:00000000 00000000 00000000 00000110
按位与运算的结果为 2 :00000000 00000000 00000000 00000010
 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值