一、嵌入式试题-记录

一、ARM指令和Thumb指令

在ARM的体系结构中,可以工作在三种不同的状态,一是ARM状态,二是Thumb状态及Thumb-2状态,三是调试状态。而ARM状态和Thumb状态可以直接通过某些指令直接切换,都是在运行程序,只不过指令长度不一样而已;

ARM状态:arm处理器工作于32位指令的状态,所有指令均为32位;

Thumb状态:arm执行16位指令的状态,即16位状态;

thumb-2状态:这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升,优化;

调试状态:处理器停机时进入调试状态。

也就是说:ARM状态,此时处理器执行32位的字对齐的ARM指令;Thumb状态,此时处理器执行16位的,半字对齐的THUMB指令。 

 

ARM状态和Thumb状态切换程序:

  • 从ARM到Thumb: LDR R0,=lable+1 BX R0(状态将寄存器的最低位设置为1,BX指令、R0指令将进入thumb状态);
  • 从ARM到Thumb: LDR R0,=lable BX R0(寄存器最低位设置为0,BX指令、R0指令将进入arm状态)。
  • 当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。

 

关于这个知识点还有几个注意点:

  • ARM处理器复位后开始执行代码时总是只处于ARM状态;
  • Cortex-M3只有Thumb-2状态和调试状态;
  • 由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。

 

另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。

 二、C语言编译过程中,volatile关键字和extern关键字分别在哪个阶段起作用?

volatile应该是在编译阶段,extern在链接阶段。

volatile关键字的作用是防止变量被编译器优化,而优化是处于编译阶段,所以volatile关键字是在编译阶段起作用。

三、下面这段程序的运行结果?

  1. nt main() {

  2. int a[10] = {     0,1,2,3,4,5,6,7,8,9 };

  3. memcpy(a + 3,     a, 5);

  4. for (int i =     0; i<10; i++){

  5. printf("%d     ", a[i]);

  6. }

  7. return 0;

  8. }

解答:0 1 2 0 1 5 6 7 8 9

首先看一下内存复制函数memcpy()函数的定义:

void * memcpy ( void * destination, const void * source, size_tnum );

将source指向的地址处的 num 个字节 拷贝到 destination 指向的地址处。注意,是字节。 

因为memcpy的最后一个参数是需要拷贝的字节的数目!一个int类型占据4个字节!这样的话,本题5字节,实际上只能移动2个数字(往大的去)。如果要想达到将a地址开始的5个元素拷贝到a+3地址处,需要这么写:

memcpy(a + 3, a, 5*sizeof(int))

四、Linux中的文件/目录权限设置命令是什么?

解答:chmod

五、简述实时操作系统和非实时操作系统特点和区别。

解答:实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可;

实时性最主要的含义是:任务的最迟完成时间是可确认预知的;

 

六、什么是嵌入式系统?嵌入式系统一般由哪几部分构成?

嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”

由硬件层、中间层、系统软件层和应用软件层组成。

硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。

硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。

BSP具有以下两个特点:
硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。
操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。
系统软件层由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。

七、Cortex-M3的处理器有那两种工作模式和状态?如何进行工作模式和状态的切换?

ARM状态:32位,ARM状态执行字对齐的32位ARM指令。Thumb状态,16位,执行半字对齐的16位指令。

用Bx Rn指令来进行两种状态的切换。

用户(user)模式,系统(system)模式,一般中断(IRQ)模式,快速中断(FIQ)模式,管理(supervisor)模式,中止(abort)模式,未定义指令终止(undefined)模式。

八、STM32共有那几种基本时钟信号

在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

九、简述DMA控制器的基本功能;

直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

你可能感兴趣的:(一、嵌入式试题-记录)