一、C/C++
1.const的作用
(1) 定义局部变量或全局变量为常量,不可更改
(2)修饰函数的参数,表示函数体内不能修改该参数的值
(3)修饰函数的返回值(比方说返回值是一个指针,那么指针的指向不可修改)
(4)节省空间,避免不必要的内存分配(什么情况下可以节省呢,后续查找资料再补充)
2.什么情况下使用const关键字
(1)修饰一般常量
(2)修饰常数组
(3)修饰常对象
(4)修饰常指针(常量指针和指针常量)
常量指针:指向常量的指针,如const int *p ; int const *p ;都是常量指针,不能改变指向的内存的 值,但可以更改指针的指向
指针常量:本质是一个常量,指针的指向不可以变,但是指向的内存里的值可以变,
如int *const p
(5)修饰常引用:被修饰后不能指向其他对象
(6)修饰函数的常参数:函数体内不能对参数进行修改
(7)修饰函数的返回值
(8)在另一连接文件中引用const
3.new/delete与malloc/free的区别
(1) new/delete是c++中的操作符,而malloc/free是标准库函数
(2)对于非内部数据对象来说,只使用malloc是不能完成动态对象要求的,一般在创建对象时需要调用构造函数,对象消亡时,自动调用析构函数,而malloc free是库函数,并不是运算符,不在编译器的控制范围之内,不能够自动调用构造函数和析构函数。而new在为对象申请分配内存空间时,可以自动调用构造函数,同时完成对对象的初始化,delete可以自动调用析构函数,而malloc和free只是分配内存和释放内存。
(3)new返回的是指定类型的指针,并且可以自动计算申请的内存的大小,malloc需要我们自己计算大小,并且在返回时强转为实际类型的指针。
二、Arm 体系结构
1.嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别?
基于RAM:(1) 需要把硬盘和其他介质的代码先加载到arm中,加载过程中一般有重定位的操作。
(2) 速度比基于ROM的快,可用RAM比基于ROM的少,因为所有的代码数据都必须存放在RAM中。
基于ROM:(1) 速度较基于RAM的慢,因为会有一个把变量,部分代码等从存储器(硬盘,flash)搬移到RAM的过程。
(2) 可用RAM资源比基于RAM的多
2.什么是哈佛结构和冯诺依曼结构
定义:
冯诺依曼结构采用指令和数据统一编制,使用同一条总线传输,cpu读取指令和数据的操作无法重叠。
哈佛结构采用指令和数据独立编址,使用两条独立的总线传输,cpu读取指令和数据的操作可以重叠。
利弊:
冯诺依曼结构主要用于通用计算机领域,需要对存储器中的代码和数据频繁的进行修改,统一编制有利于节约资源。
哈佛结构主要用于嵌入式计算机,程序固化在硬件中,有较高的可靠性,运算速度和较大的吞吐。
3.什么是arm流水线技术
流水线通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一,arm7处理器核使用典型三级流水线的冯诺依曼结构,arm9系列则采用了基于五级流水线的哈佛结构。通过增加流水线级简化了流水线各级的逻辑,进一步提高了处理器的性能。
PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1.取指令(从存储器装载一条指令),2.译码(识别将要被执行的指令),3.执行(处理指令并将结果写回寄存器)。
4.Arm有几种工作模式?
(1)用户模式(USR):用户程序的工作模式,运行在操作系统的用户态,它没有权限区操作其他硬件资源,只能执行处理自己的数据,也不能切换到其他模式,要想访问硬件资源或者切换到其他模式只能通过软中断或产生异常
(2)系统模式(SYS):系统模式是特权模式,不受用户模式的限制,用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户名是的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源
注意:用户模式与系统模式两者使用相同的寄存器,都没有SPSR(已保存程序状态寄存器),但系统模式比用户模式有更高的权限,可以访问系统所有资源
(3)一般中断模式(IRQ):也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源
(4