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实时时钟驱动
- RTC实时时钟为操作系统提供一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去。
- 实时时钟(RTC)单元可以在系统电源关半闭的情况下依靠备用电池工作,一般主板上都有一个纽扣电池作为实时时钟的电源。
- RTC可以通过使用STRB/LDDRB这两个ARM指令向CPU传递8位数据(BCD码)。数据包括秒、分、小时、日期、天、月、和年。
- 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