ARM经典问题.
- 格式:doc
- 大小:41.50 KB
- 文档页数:7
ARM硬件笔试题及答案ARM硬件笔试题及答案题目一:1. 请简述ARM的体系结构,并说明其特点。
答案:ARM(Advanced RISC Machine)是一种精简指令集计算机(RISC)体系结构,主要用于移动设备和嵌入式系统。
其特点包括:- 简单易用:ARM体系结构具有较小的指令集,指令格式规整,易于编码和调试。
- 高效节能:ARM芯片设计简洁,运行效率高,功耗低,适合移动设备和嵌入式系统。
- 可扩展:ARM体系结构支持多种大小和各种应用的处理器,可以根据具体需求进行扩展。
- 易于集成:ARM芯片可与其他硬件设备和外围设备集成,提高系统整体性能。
题目二:2. 请解释ARM处理器的大端和小端字节序,并说明它们的差异。
答案:大端字节序(Big-Endian)将高字节存储在低地址,低字节存储在高地址;小端字节序(Little-Endian)将低字节存储在低地址,高字节存储在高地址。
两者的差异在于字节的存储方式不同,导致对内存中多字节数据的访问和解释方式不同。
题目三:3. ARM指令集中的条件执行机制是如何实现的?请举例说明条件执行的过程。
答案:ARM指令集中的条件执行机制通过设置条件码标志位(Condition Code Flags)来实现。
条件码标志位包括N(负数)、Z(零)、C(进位)和V(溢出),根据不同的条件码标志位的状态,决定是否执行指令。
例如:MOVNE r0, #10这条指令的意思是:如果Z标志位为0(即不为零),则将立即数10赋值给寄存器r0;如果Z标志位为1(即为零),则不执行这条指令。
题目四:4. 请解释ARM体系结构中的异常处理机制,并举例说明异常的触发和处理过程。
答案:ARM体系结构中的异常处理机制用于处理非预期或异常事件,如中断、系统调用、数据访问错误等。
异常处理通过软件和硬件配合实现。
举例说明异常处理过程:当发生一个中断时,硬件会保存当前的状态信息(如程序计数器、标志位等),并跳转到中断处理程序。
《ARM原理及应用》复习题填空题1.STM32F103是_32_位单片机,内核是ARM公司的___Cortex-M3___。
2.STM32F103最高工作频率___72MHz___。
片内具有多种外设,它们分别是:_GPIO_、_USART_、_I2C_、_SPI_、_ADC_、_DAC_、_TIM_、_RTC_、_IWDG_、_WWDG_。
IWDG:独立看门狗WWDG:窗口看门狗3.STM32103的GPIO端口具有多种配置状态,输入有3种状态,它们分别是_模拟输入_、_浮空输入__和上拉/下拉输入;输出有4种状态,它们分别是_通用推挽输出_、_通用开漏输出_、_复用推挽输出_和_复用开漏输出_。
5.当STM32I/O端口配置为输入时,输出功能被_禁止_,施密特触发器被激活__。
6.STM32的所有端口都有外部中断能力。
当使用外部中断线时,相应的引脚必须配置成输入模式。
7.STM32具有单独的位设置或位清除能力。
这是通过GPIOx->BSRR_和GPIOx->BRR寄存器来实现的。
8.STM32芯片内部集成的12位位ADC是一种逐次逼近(比较)型模拟数字转换器,具有18个通道,可测量16个外部和2个内部信号源。
9.STM32的NVIC管理着包括Cortex-M3核异常等中断,其和ARM处理器核的接口紧密相连,可以实现时延的中断处理,并有效地处理后到中断。
10.系统计时器(SysTick)提供了1个24位二进制递减计数器,具有灵活的控制机制11.STM32通用定时器TIM的16位计数器可以采用三种方式工作,分别为向上计数模式、向下计数模式和向上下计数模式。
12.STM32系列ARM Cortex-M3芯片支持三种复位形式,分别为上电复位、按键复位和备份复位。
简答题1.什么是嵌入式系统?嵌入式系统一般由哪几部分构成?它与通用计算机有何区别?答:是一种嵌入受控器件内部,为特定应用而设计的专用计算机系统,具有“嵌入性”、“专用性”和“计算机系统”3个基本要素。
第一章思考与练习 1、举出3个书本中未提到的嵌入式系统的例子。
答:红绿灯控制,数字空调,机顶盒 2、什么叫嵌入式系统嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3、什么叫嵌入式处理器?嵌入式处理器分为哪几类?嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。
嵌入式微处理器(Embedded Microprocessor Unit, EMPU 嵌入式微控制器(Microcontroller Unit, MCU 嵌入式DSP 处理器(Embedded Digital Signal Processor, EDSP 嵌入式片上系统(System On Chip 4、什么是嵌入式操作系统?为何要使用嵌入式操作系统?是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。
其次,提高了开发效率,缩短了开发周期。
再次,嵌入式实时操作系统充分发挥了 32 位 CPU 的多任务潜力。
第二章 1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务是什么?项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4 个阶段。
识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。
提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。
执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展,分析项目偏差,采取必要措施以实现目标。
结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系统交接给维护人员;结清各种款项。
2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险?在一个项目中,有许多的因素会影响到项目进行,因此在项目进行的初期,在客户和开发团队都还未投入大量资源之前,风险的评估可以用来预估项目进行可能会遭遇的难题。
需求风险;时间风险;资金风险;项目管理风险 3、何谓系统规范?制定系统规范的目的是什么?规格制定阶段的目的在于将客户的需求,由模糊的描述,转换成有意义的量化数据。
简答题什么是嵌入式操作系统?答:嵌入式系统是以应用为中心,以计算机技术为基础,软/硬件可裁减,功能。
可靠性,成本,体积,功耗要求严格的专用计算机系统。
与通用计算机相比,嵌入式系统有哪些特点?答:(1).嵌入式系统通常是面向特定应用的;(2).嵌入式系统是将计算机技术,半导体技术和电子技术与各行各业的具体应用相结合的后的产物,是一门综合技术学科;(3).嵌入式系统和具体应用有机的结合在一起,它的升级换代也是和具体产品同步进行的,因此嵌入式产品一旦进入市场,就有较长的生命周期;(4).为了提高执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存储于磁盘等载体中;(5).嵌入式系统本身不具有自主开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。
ARM处理器有几种寻址方式,说明各种寻址的方式。
答:立即寻址:操作数直接放在指令中。
例如:ADD R0,R0,#0x3f ;R0←R0+0x3f寄存器寻址:操作数放在寄存器中。
例如:ADD R0,R1,R2 ;R0←R1+R2寄存器间接寻址:操作数在内存,以寄存器中的值作为操作数的地址。
例如:LDR R0,[R1] ;R0←[R1]基址加偏移量寻址(基址变址寻址):基址寄存器的内容与指令中的偏移量相加形成操作数的有效地址例如:LDR R0,[R1,#4] ;R0←[R1+4]LDR R0,[R1,R2] ;R0←[R1+R2]多寄存器寻址:一条指令可以完成多个寄存器值的传送。
例如:LDMIA R0,{R1,R2,R3,R4} ;R1←[R0];R2←[R0+4];R3←[R0+8];R4←[R0+12]堆栈寻址:堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
例如:STMFD R13!,{R0,R4-R12,LR}LDMFD R13!,{R0,R4-R12,PC}举例介绍嵌入式处理器有哪几类?答:1.嵌入式微处理器(Embedded Microprocessor Unit,EMPU);2.嵌入式微控制器;(Embedded Microcontroller Unit,EMCU)3.嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP);4.嵌入式片上系统(Embedded System on Chip,EsoC);什么是立即数?请简要描述立即数在使用时有什么注意要点。
ARM经典300问第1章体系结构第1问:Q:请问在初始化CPU堆栈的时候一开始在执行mov r0, LR这句指令时处理器是什么模式A:复位后的模式,即管理模式.第2问:Q:请教:MOV中的8位图立即数,是怎么一回事0xF0000001是怎么来的A:是循环右移,就是一个0—255 之间的数左移或右移偶数位的来的,也就是这个数除以4 一直除, 直到在0-255的范围内它是整数就说明是可以的!A:8位数(0-255)循环左移或循环右移偶数位得到的,F0000001既是0x1F循环右移4位, 符合规范,所以是正确的.这样做是因为指令长度的限制,不可能把32位立即数放在32位的指令中.移位偶数也是这个原因.可以看一看ARM体系结构(ADS自带的英文文档)的相关部分.第3问:Q:请教:《ARM微控制器基础与实战》2.2.1节关于第2个操作数的描述中有这么一段: #inmed_8r常数表达式.该常数必须对应8位位图,即常熟是由一个8位的常数循环移位偶数位得到.合法常量:0x3FC,0,0xF0000000,200,0xF0000001.非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.常数表达式应用举例:......LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1 = R1-4针对这一段,我的疑问:1. 即常数是由一个8位的常数循环移位偶数位得到,这句话如何理解2. 该常数必须对应8位位图,既然是8位位图,那么取值为0-255,怎么0x3FC这种超出255的数是合法常量呢3. 所举例子中,合法常量和非法常量是怎么区分的如0x3FC合法,而0x1FE却非法0xF0000000,0xF0000001都合法,而0xF0000010又变成了非法4. 对于汇编语句LDR R0,[R1],#-4,是先将R1的值减4结果存入R1,然后读取R1所指单元的值到R0,还是先读取R1到R0,然后再将R1减4结果存入R1A:提示,任何常数都可用底数*2的n次幂来表示.1. ARM结构中,只有8bits用来表示底数,因此底数必须是8位位图.2. 8位位图循环之后得到常数,并非只能是8位.3. 0xF0000010底数是9位,不能表示.4. LDR R0, [R1], #-4 是后索引,即先读,再减.可以看一看ARM体系结构对相关寻址方式的说明.3第4问:Q:在程序移植的过程中,什么代码段处于什么样的模式,这可真是一个困扰人的大难题, 有没有一种标志或办法能够识别"代码段处于什么样的模式"A:读取CPSR ,任何时候都是可以读.第5问:Q:为什么保护现场时,总是保护R0-R3,R12,为什么不保护R4-R11A:请看一看"ARM-thumb过程调用标准"这个文档.第6问:Q:请问mov R1,#0x00003DD0 错误:out of the range of operation是怎么回事情我就是想IODIR=0x00003dd0,汇编就是LDR R0,=IODIRMOV R1,#0x00003dd0STR R1,[R0]编译时候说是超出操作范围A:使用ldr,mov的操作数为8位位图数.第7问:Q:"在ARM7TDMI(-S)处理器内部有37个用户可见的寄存器:"问题:"用户可见"应该怎样理解这37个寄存器是否是37个不同的物理寄存器,例如R8与R8_fiq应该是两个不同的物理寄存器吧A:用户可见是指用户可以通过程序操作的.R8与R8_fiq是两个不同的寄存器.第8问:Q:USR模式,SVC模式,IRQ模式分别有哪些限制A:对于外设操作限制与芯片设计有关.USR模式不能设置CPSR寄存器.用户模式下无SPSR寄存器,代码可以为ARM,Thumb.第9问:Q:请问"在初始化堆栈时就决定了工作模式"是什么意思如何决定工作模式的A:设置CPSR寄存器.第10问:Q:请问:ARM汇编程序设计中所谓的"文字池"作何理解A:可以理解为常量数组,文字池中保存的是常量,这些常量可以是正常的常量,也可以是地址.4第11问:Q:为什么在中断向量表中不直接LDR PC,"异常地址".而是使用一个标号,然有再在后面使用DCD定义这个标号A:因为LDR指令只能跳到当前PC 4kB范围内,而B指令能跳转到32MB范围,而现在这样在LDR PC, "xxxx"这条指令不远处用"xxxx"DCD定义一个字,而这个字里面存放最终异常服务程序的地址,这样可以实现4GB全范围跳转.Q:LDR 不是可以全空间跳转的吗《ARM微控制器基础与实战》程序清单5.3.A:LDR伪指令通过设置指令缓冲池才能实现全范围跳转,而LDR指令则只能实现4KB范围跳转.第12问:Q:ARM7TDMI-S和ARM7TDMI有何区别A:ARM7TDMI-S是ARM7TDMI的可综合(synthesizable)版本(软核).对应用工程师来说,除非芯片生产厂商对ARM7TDMI-S进行了裁减,否则ARM7TDMI-S与ARM7TDMI没有太大的区别,其编程模型与ARM7TDMI一致.第13问:Q:DCD伪指令的疑惑."StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4"这句话是什么意思DCD后面的程序标号或数字表达式是何意A:它的内容是初始化递减堆栈的最高地址,看《ARM微控制器基础与实战》2.3.2节.5第2章编译器与语言第14问:Q:00254: Unimplemented RDI message是什么错误提示我的设置连接都正常,是不是芯片烧了A:是JTAG的问题.可以先使用ISP操作试试就知道了,如果能ISP,说明LPC2104没有损坏,还能正常运行程序.第15问:Q:请教:我在调试程序的时候在AXD中出现这样的提示信息:RDI Warning 00159:could not open specified device port.我是根据配套教程的步骤设置的.A:请按照光盘\easyarm_drive\readme.txt安装驱动程序.第16问:Q:我用实验程序运行经常出现下列信息! 程序不能下载到目标板.Warnning! interrupt vectors data is not correct!Program you downloaded can not run freely!A:1.仿真器配置一定要正确,即"EasyARM Configuration"设置窗口中的"FLASH"项中选择"Erase Flash when need";2.向量表累加和要为0;3.可以先在RAM调试一个程序(运行),然后STOP,再使用File->Load Image...加载要下载到FLASH的调试文件.第17问:Q:在ADS中是否可以进行软件调试基于UCOS-II的程序A:ADS软件调试只能调试ARM的内核,不能调试外设.但是取消PLL 锁定检测后,可以调试任务切换,最终到空闲任务上.开始移植时软件仿真是最好的工具.第18问:Q:ARMulate软件是干什么的2104不是用EasyJTAG.dll来仿真吗A:软件仿真只能仿真ARM 核.第19问:Q:有关LPC2106.INC的问题.我无法在project引用lpc2106.inc文件,只能引用lpc2106.h 文件, 这是什么原因且当我的主程序用汇编编写时,不能引用lpc2106.h,用lpc2106.inc则无法加入project,请问汇编器应如何设置A:不用加2106.inc只要该文件在你的工程文件夹中,就可以直接在汇编程序的开始处加6"include 2106.inc".注意:该文件是汇编文件定义的头文件,定义内部寄存器.第20问:Q:入口点是什么意思我在使用LPC2106上移植UCOS-II,每次MAKE时总是提示我Image does not have an entry point,可是我是把光盘的vetctors.s 复制过来的,而且仔细看了看,已经声明了ENTERY,这是怎么回事A:需要在ADS中设置入口.第21问:Q:请教:如何定义不被初始化变量A:让编译器不知道有这个内存地址即可.A:如用分散加载文件分配RAM故意预留一部分RAM不分配,用它来存您不需要初始化的东西.或者不调用编译器提供的启动代码,不过这样可能编程会麻烦一些.第22问:Q:我直接通过JTAG口下载EasyArm板带的Ext1_test程序到ARM中,出现中断向量的告警: interrupt vector is not correct arm is not running freely.果然复位后芯片不能运行.但是我用串口下载后芯片能正常工作,中断也行的.并且我用JTAG仿真的话,芯片能正常工作,中断也行的,唯独JTAG口下载不行.不知道是什么原因A:仿真器配置中要设置Erase Flash when need.也可以这样试试:1.可以先打开一个工程在RAM中调试运行;2.stop程序;3.使用File->Load Image…重新加载Ext1_test生成的*.axf文件.Q:仿真器配置中我是设置了Erase Flash when need,但照你说的话,那不是在RAM下调试吗在RAM下调试我是可以的,但是下载后出现interrupt vector data is not correct.我又看了几篇文章,是不是跟中断向量表的累加和不为零有关系啊A:是的,是向量表的累加和不为零.因为如果用ISP下载能运行,说明向量表的累加和已为零,而用JTAG下载不能运行的情况可能是没有正常下载代码.先在RAM中调试,目的是为了后面正确下载程序到FLASH.第23问:Q:用Scatter怎样将某个函数或文件定位在Flash的某个位置A:参考/download/downs.asp ID=10097第24问:Q:我在仿真时遇到这样的提示:Error, Flash is protected by user configation!怎么写到flash里面呢A:看配套《ARM微控制器基础与实战》附录一.第25问:Q:我在移植实验中想到了两个问题,如下:1.Debug和Release以及DebugRel有什么不同,为什么在作2104移植实验时,要用Release2.在Release中为什么要将RW Base设置为0x40000040 我将其设置为0x40003000,为什么不能工作A:都只是一个问题,内存空间的使用,因为跑OS要比较大的内存空间,所以要腾出点地方.第26问:Q:请问没有MMU的ARM芯片是否支持使用malloc()函数动态分配内存A:是否支持malloc()函数与芯片没有多大关系,主要与编译器有关.Q:再问:如果没有操作系统支持呢A:也支持.第27问:Q:在I2C实验程序中,我想查看数据缓冲区DataBuf的值,怎么查看A:watch窗口或鼠标停留在要查看的变量名上.Q:我查询的是写入DataBuf缓冲区的值,鼠标在上面根本就不会出现他的值,即使在watch 中加入,结果也是"name not found".A:变量被优化,调试时可以把该变量定义为全局变量查看.第28问:Q:仿真软件和2104开发板连接不上DBE Warning 00041:!An unspecified Debug Toolbox call failed电源和开发板都连好,错误和没接开发板一样,驱动也安装了,安装时按确定键时,软件很长时间才有如上反应,请帮忙A:1.并口是否正常2.在其它操作系统(如98)下或其它台式PC下试试.第29问:Q:如何生成32位hex文件8我在Release Setting->ARM fromELF->Output Format中设置为Intel 32bit HEX,可是好像没有生成hex文件A:试试这种方法:Target-->Target Setting-->Post Link中选择"ARM fromELF"加上你上面设的应该不成问题.第30问:Q:请问关于settings中r0 base rw base的意思A:ro:read only,rw:read and write.第31问:Q:编译成功后的信息第一行,code,R0 data,RW data,ZI data,debug分别代表什么A:R0 只读段,即程序代码空间;RW 可读/写段,即数据变量空间;ZI 清零变量段,即需要清零初始化的数据变量空间.第32问:Q:如何在ADS里面看任务执行的一些情况比如堆栈.A:多任务环境下的堆栈,内存等信息需要调试软件的支持才可以实现.ucos下有一个统计功能的模块可以间接实现部分功能.第33问:Q:请问向flash烧数据时出现:exceeds flash limitation 请予赐教!A:要写入的flash地址超过了范围.如果不是代码太大的问题,可以检查scf文件是否正确.第34问:Q:在LPC2214之类的芯片中如何实现数组的绝对地址定位,比如51的_at_的用法.A:*((char*)0x40000300)类似访问Q:谢谢,但这样做就无须定义数组变量,访问也不便,还有高招吗A:可以使用分散加载.第35问:Q:请问ADS编译错误"L6221E:Execution region ER_RO overlays with Execution region ER_ZI" 该如何解决A:请用我们网站上的工程模板试一试,最大的可能是因为你的RELEASE或者DEBUG选项里面没有正确设置,按照参考《ARM微控制器基础与实战》上面的设置,是不会有这个问题的.9第36问:Q:请教一下:将程序写入flash,再用从JTAG方式调试写入之后再复位程序没什么反映.看了很多以前的帖子,说memmap寄存器要为1,我用的是一个很简单的控制led的例子, 改动了参数之后写入flash的.在这个程序的vectors中找不到关于memmap寄存器操作的部分啊,这是怎么回事,该怎么办呢A:《ARM微控制器基础与实战》上附录有"常见问题",列举了几点程序写到FLASH不能运行的原因. memmap操作可以在target.c中的TargetResetInit()函数内添加.第37问:Q:HEX文件.EASY2100配套《ARM微控制器基础与实战》上讲:把项目编译成HEX文件,我不会呀,咋办A:Target-〉target settings设置Post-linker并且设置Linker-〉fromELF.Q:再问:我用的是光盘里的例子,打开工程项目里是DebugInARM.DebugInFlash.RelInFlash.不是《ARM微控制器基础与实战》上的DebugRel呀,我都照《ARM微控制器基础与实战》上设置的,可用ISP下载,提示无法找到HEX文件.A:光盘上的例子是用专用工程模板建立,已经设置好参数,与默认模板不同.第38问:Q:EasyARM2100开发板如何通过JTAG接口下载到Flash我在用EasyARM2100开发板时JTAG接口不能进行Flash中的调试(DebugInFlash),但是可以在RAM中调试(DebugInRAM),且通过ISP编程可以写入Flash.通过JTAG接口进行DebugInFlash调试时,总是出现如下提示:Flash Sector 0 write failed!Warnning interrupt vectors data is not correct!Program you downloaded can not run freely!请问是什么原因我该如何办A:仿真器设置选项有一个允许擦除FLASH的选项,选择它.第39问:Q:我发现程序在RAM调试时(RO=0X40000000) OK,但是JTAG下载到FLASH(RO=0X00000000), 显示如下:The session file 'c:\Documents and Settings\jan\default-1-2-0-0.ses'could not be loaded.A:这是ADS自身的问题,请不要通过IDE运行AXD,而是通过开始菜单运行,然后Load调试文件调试.第40问:Q:我有几个问题想问问大家.10调试主机负责对ARM源程序进行编译链接,最好用什么样的高级语言对ARM源程序进行编译链接使用调试程序(如AXD)进行JTAG调试,AXD是什么调试程序,是否是类似什么软件之类的到哪能下载AXD的调试程序呢怎么样进行AXD程序进行JTAG调试如何通过JTAG仿真器发送到目标机上呢对于单片机的调试,都用到了什么软件都个有什么作用呢A:可以使用ADS1.2,Keil C也支持.AXD是ADS的一个组件.您可以在本公司网站下载EasyARM2100开发套件快速入门看一看.第41问:Q:EasyARM2100AXD调试时出错,故障现象:按照光盘上的方法设置好ADS1.2后打开光盘上的expamples\gpio\c\LedDisp的工程文件(从光盘上拷贝到硬盘,已去处只读属性).编译通过后,按Debug按键运行调试,进入AXD.按Go按键,EasyARM没有反应.再按Stop按键.AXD弹出两个确认框窗口:"No disassembly could be read at the requested address".如果进入AXD直接按Step按键,也是会弹出同样的两个确认框.软件是光盘上的,没有经过任何改动.光盘上的程序试过4,5个都是这种情况.AXD的设置是按照光盘上的说明设置的.EasyARM上的JP8 是断开的.ADS在出现这种问题后重新安装过,故障依旧.出现这个问题前,可以调试.只是单步的时候感觉比较慢.差不多1-2秒钟才能单步一次.A:原因找到了,是芯片被加密了,无法写入新的程序,用FLASH ISP清除后解决.加密后JTAG完全不能控制芯片,否则可能被解密.第42问:Q:我板上的lpc2214开始可以在线编程,只搞了两三次可以把文件写进去.但我发现P0.14 未置低电平时也进入ISP模式,烧入的文件原来可以ISP下载到2014开发板中运行的. 最后只能读芯片的一些ID,载文件都不能进行.以下是对整片ERASE时,对串口的捕获,命令返回是19.SynchronizedSynchronizedOK11059OKU 23130P 0 14E 0 141119 configure tar... -> ARMUL , 只能仿真ARM核外设不能仿真.第48问:Q:为什么盘中的工程会出错啊A:文件的只读属性去掉了吗第49问:Q:您在2104的《ARM微控制器基础与实战》中提到ucos与应用代码分开编译,在分开编译调试成功之后,最后要将代码统一固化到芯片中.在最后一步需要注意什么统一编译时感觉要改动很多东西,有没有什么最简单的办法能否详细介绍一下方法多谢!A:使用我们的工程模板,可在本公司网站下载.其实不分开编译也可调试./tools/kaifaban/EasyARM2104.asp的EasyARM2104开发套件快速入门和LPC210...第50问:Q:请问,我的2104板子,通过EasyJTAG仿真时,在AXD上没有文件,而且出现这样"Error, Flash is protected by user configation!"的提示,这是怎么回事啊在AXD应该打开什么类型的文件啊谢谢啦!!!!A:在仿真器的配置窗口设置仿真器允许擦除FALSH.AXD->Options->configure target->configure->erase……13第51问:Q:关于arm汇编语言跳转指令的特殊用法.有如下两条跳转指令:beq lablefbeq lableb其中lable为某段程序的标号,beq lablef 表示向前跳转到与当前指令最接近的标号lable处执行,而beq lableb表示向后跳转到与当前指令最接近的标号lable处执行.在arm汇编中有定义这样的用法吗A:没有.第52问:Q:我将一段程序从flash从复制到了RAM中,但是因为混合编程中不能直接向PC寄存器中赋值来实行跳转,这样我该如何跳转到这个RAM中的地址呢A:用函数指针.可参考IAP例子.第53问:Q:我想详细的了解一下ADS开发工具中的stack.s ,heap.s和startup.s中代码的含义,各位高手推荐本书或给解释一下A:开发套件用户指南的第3.1.3节有说明.stack.s定义了系统模式堆栈的起始地址.heap.s为初始化库函数的堆,是按ADS的编译器要求编写的.startup.s向量表及初始化代码,是根据CPU来编写的.第54问:Q:我不知道所选择的C文件到底是用ARM还是THUMB编译的,请大侠指点!A:看配套《ARM微控制器基础与实战》7.1,7.2,7.3节.第55问:Q:我重新建立了一个工程,没有用模板,TEST.C程序在编译的时候提示OS_EVENT没有申明,但是我看了代码,TEST.C中包含了CONFIG_EX.H,而congif_ex.h中又包含了include_ex.h, include_ex.h,这两个头文件又包含了ucos_ii.h,而OS_EVENT是在ucos_ii.h中申明的,不知道为什么会出现这种错误,能不能给我一个比较合理的目录结构A:请参考我们光盘的目录结构.最好使用我们的工程模板.第56问:Q:请问,我现在做2114的产品开发.出现以下问题,特向您请教! 问题:我们开发的产品要采样,采用周期固定.于是我们采用timer0进行时钟触发,利用触发中断程序每隔10毫秒采样一次并显示波形.这都能很好的进行.但是在中断程序里面对几个全局变量赋值, 跳出中断后却不能使用该全局变量.很是头疼!请赐教!!14框架如下:uint8 a; //全局变量void __irq funtimer0(){...a=0; //在中断函数里面对全局变量赋值...}void fun1(){uint8 i;i=0;.......i=a; // 出错位置,在调试过程中运行到当前位置,鼠标移动到变量a上// 显示数值是0,但是不能传给i,i的值不会随该命令改变.......}因此,我在中断函数中采集到的数据放到全局数组中.采集完成关中断后在用户模式下的程序中来处理该数组,但是该数组中的数据也不能使用!全局数组变量占1000个字节, IRQ堆栈长度是256.A:全局变量用volatile声明.第57问:Q:在AXD里打开Debuger Internals,在Variable Name里为什么没有PINSEL2,ADDR,ADCR 等寄存器要在哪里设置A:有些片内外设寄存器是不能读出,《ARM微控制器基础与实战》上的P33页有说明及处理方法(在Memory窗口写入相应寄存器地址).第58问:Q:请问不连easyArm板可不可以直接软件调试程序我是指如果想直接调软件部分,能不能在ads或axd里直接调试A:这和板子没关系啊,你直接选ARMulate不就行了,注意把等待PLL配置完那条语句屏蔽就可以啦!第59问:Q:AXD里面出现"RDI Warning 00159: Could not open specified device port"谁能告诉我这个是问题啊我一直搞不懂啊,全部是按照《ARM微控制器基础与实战》第4章上配的图做的啊,但是就是不能仿真啊.A:请先按照光盘的easyarm_drive\readme.txt安装驱动程序.15第60问:Q:1.在《ARM微控制器基础与实战》的2.6.3节有说到"浮点数寄存器(F0-F7...)",2104是否具有这些寄存器2.如果EasyArm不支持浮点运算,而我的程序需要用到浮点运算,请问可以实现吗A:1.没有.2.用C就可以用浮点运算.第61问:Q:EASYARM2104的例子程序怎么都是调用C写的程序,汇编那个怎么没用的啊A:按如下步骤进行处理:1.在项目管理窗口中删除原来的所有文件;2.在项目管理窗口中增加汇编文件*.S;3.编译链接,调试.第62问:Q:请问版主:在AXD调试软件中,我单步运行到一定时候,我想让自己编的软件从复位处重新运行, 在AXD软件中,EXECUTE栏目中有单步,连续,运行到光标处等功能,但无复位功能,如果要实现此功能,如何操作A:我也没有发现,目前只能用重新装载的操作实现.第63问:Q:在AXD调试中,通过从jtag接口,连接上lpc2106,出现如下信息:TKSimulator for ADS, V1.2, 2003/08Software Supplied by: ZLGMCUARM7TDMI-S, Little Endian在从file|load imgage...文件,出现两种情况:1.正常,完全能调试;2.出现问题,如下:RDI Warning 00254: Unimplemented RDI message请问,这是错在哪里如何解决谢谢!A:可能是电源或其他接插件接触不良引起.第64问:Q:请教几个问题:1.移植中底层接口里的__swi关键字在SDT中能用吗2.为什么在勘误文档中时钟节拍服务子程序里去掉了开中断及关中断的宏3.时钟节拍中断的优先级应该设为最高吗16A:1.不知,请自己看一看软件自带文档.2.因为中断服务程序中肯定是关中断的.3.不必.第65问:Q:arm汇编中的中括号是什么意思比如下面的例子中括号是什么作用呀[ PLLONSTARTldr r0,=PLLCONldr r1,=((0xe8<<12)+(0x4<<4)+0x2)str r1,[r0]]A:等效于:IF PLLONSTARTldr r0,=PLLCONldr r1,=((0xe8<<12)+(0x4<上电->启动AXD.现象:数码管能显示不断变化的数字0--F,但是AXD的连接失败,提示"DBE Warning 00041: ....".重复试了几遍,现象相同.请教原因以及对策.A:刚才把我机器的Win2K系统的用户属性从"PowerUser"修改为"Administrator"就没问题了.可能是ADS/AXD安装的时候用了Administrator权限,在"PowerUser"下工作有问题吧.如果哪位老兄有类似问题,不妨试一下这个方法.第67问:Q:在Init.s中有这样一段:ResetBL InitStack ;初始化堆栈BL TargetResetInit ;目标板基本初始化B __main ;跳转到c语言入口谁知道__main()函数的具体内容假如我不需要调用库函数的话,是否可以改为B mainA:看调试是汇编代码里有__main(),组成成分与一些链接选项有关.可以.但是全局变量初始化不了.17第68问:Q:我在C中嵌入这样一条语句__asm{MRS R4,CPSR;STMFD SP!,{R4};ORR R4,R4,0x80;MSR CPSR_cxsf,R4}会出新报错"illegal write to sp"版主和各位大侠有什么办法解决阿A:嵌入汇编不能使用SP.第69问:Q:请问ADS如下的编译错误是什么意思L6221E:Execution region ER_RO overlays with Execution region ER_ZIA:程序段内存分配可能有问题,RO(只读),ZI(0初始化)第70问:Q:在axd中有没有运行程序的时间计算器keil中就有那样的东西.A:有的,不过不是时间而是执行周期,可以换算成时间.在debugger internals中,具体可以参考帮助文档.第71问:Q:我最初的init.s中没有加入heap的分配和__user_initial_stackheap函数,结果程序跳到SWI中死循环.我把他们加入后就好了.或者不加入他们,把B __main改为B main 也可以.请问何解另外,就算目标板会陷入死循环,但是用软件仿真却可以正常运行.何解A:堆的位置没有分配到有效的RAM中.第72问:Q:在ARM汇编语言中,对立即数的有要求,我记得原来没有这样一说了.现在反而糊涂了, 用立即数时候,很小心很忌讳,不回象51下随心所欲的使用了,有对立即数熟悉的朋友站出来给大家释疑.A:如使用"非法数据可以使用lrd送到寄存器"的方法.首先在存储器中定义一个常量,再ldr进去,编译器是这样弄的.可以看下面语句反汇编的区别;int z=0x101;int z=0Xff;18第73问:Q:请教各位:我在AXD中单步运行一段程序后,想回到程序的开始重新运行,除了重新加载,还有其他方法或按键A:你的程序有多大程序在Flash运行点击Reload Current Image也不需要1秒吧~或在代码窗口Set PC=0第74问:Q:在《ARM微控制器基础与实战》程序清单6.22的376页的OSIntCtxSW_1中:LDR R4, [R6]ADD SP, R4, #68LDR LR, [SP, #-8]MSR CPSR_c, #(NoInt | SVC32Mode)MOV SP, R4LDMFD SP!, {R4,R5}LDR R3, =OsEnterSumSTR R4, [R3]MSR SPSR_cxsf, R5LDMFD SP!, {R0-R12, LR, PC }^请问高手:LDMFD SP!, {R0-R12, LR, PC }^是不是恢复新任务工作寄存器和工作模式, LR寄存器一并得到恢复,那么ADD指令后面的LDR LR, [SP, #-8] 指令是不是可以去掉A:两者恢复的是两个不同处理器模式的LR.第75问:Q:既然option页中的Image entry Point填入的是调试入口地址,那么在实际的程序运行当中它是不会覆盖代码中的ENTRY入口声明的,对吗仅仅是为了调试的方便.A:Image entry Point优先.其实代码中的ENTRY是为了确保代码不被优化掉.第76问:Q:我想使用标准C语言的库函数,比如memset 在string.h中有定义,可是我直接包含#include , 但是编译没错误,运行确有错误,应当怎么设置A:请使用最新的工程模板第77问:Q:软件中断是不是必须由SWI指令触发A:可以直接用你定义成软中断的函数名啊.比如:19__SWI(0x12) void myswi(void); // 声明函数__asm // 调用方式1{swi 0x12}myswi(); // 调用方式2第78问:Q:《ARM微控制器基础与实战》程序清单6.9的程序是在哪里被调用的_user_initial_stackheapLDR r0,=bottom_of_heapMOV pc,lrA:__main.千万别删哟, 否则出大事的.第79问:Q:"LDR R0, =PINSEL0" 中"="是什么意思这语句是取地址还是取地址中的内容呢A:这是LDR伪指令,可用来加载32位立即数或地址,LDR R0,=PINSEL0是将PINSEL0的地址加载到R0中.第80问:Q:我不明白"SWI 0"和"SWI 0X123456"这两条指令中的0和0X123456中有何用.有没有应用SWI的具体例子让我看看A:那是特定的中断入口地址,见ADS_DeveloperGuide_D.pdf下的swi.第81问:Q:SWI的功能表吗A:SWI的功能表由swi异常服务程序决定.很多时候由编程者自己决定.第82问:Q:请问:我在实验您的原代码进行ucos移植时用的是例1,但是在按照图7.17设置处理器的仿真器模式时enable comms channel view 和semihostin项为不可激活状态.为什么,能否给一点提示A:在一些仿真器上使能了它们会影响swi异常处理程序.第83问:Q:请问"Unimplemented RDI message"这个出错提示是什么意思啊20还有,有的时候当我用axd load一个.axf文件时,常常loading的没完没了,这是怎么回事啊A:Unimplemented RDI message:为命令操作失败,需要重新连接.下载不结束为出现不正常现象,请重新连接并下载.如果每次都出现该现象请联系我们的技术支持.第84问:Q:各位高手好,我是ARM初学者我在程序调试中"LDR PC,[PC,R2]"命令执行后PC为什么=0x0000000c, 在这条命令执行前PC+R2地址上的值是0x0000000c吗A:要使用软件仿真.0x0000000C是预取中止了.。
二、选择题:1.相对于ARM指令集,Thumb指令集的特点是_B__。
A、指令执行速度快B、16位指令集,可以得到密度更高的代码,对于需要严格控制成本的设计非常有意义C、Thumb模式有自己独立的寄存器D、16位指令集,代码密度高,加密性能好2.在ARM寄存器结构中,栈指针使用__B__寄存器。
A、R0B、R13C、R14D、R153.在ARM体系结构中,要从主动用户模式(User)切换到超级用户模式(Supervisor),应采用何种方法? CA、直接修改CPU状态寄存器(CPSR)对应的模式B、先修改程序状态备份寄存器(SPSR)到对应的模式,再更新CPU状态C、使用软件中断指令(SWI)D、让处理器执行未定义指令4.嵌入式系统加电或复位后,所有的CPU 通常都从某个由CPU 制造商预先安排的地址上取指令。
例如:对于S3C2410来说,Boot Loader会映射到__A____地址处。
A 0x0c000000B 0x00000000C 0x00000018D 0x400000185.32位体系结构的ARM处理器有____种不同的处理器工作模式,和____个主要用来标识CPU工作状态和程序运行状态的状态寄存器。
(A)A、7、7B、7、6C、6、6D、6、76.CPSR中的低8位称为控制位,下列不属于控制位的是__A__。
A、N(标志位)B、IC、FD、T7.ARM7属于A结构,ARM9属于B结构。
A、冯.诺依曼B、哈佛8.ARM7是C级流水线,ARM9是D级流水线。
A、1B、2C、3D、59.ARM中可以访问状态寄存器的指令是 D ,能够访问内存的指令是C 。
A、MOVB、ADDC、LDRD、MRS10.在下列ARM处理器的各种模式中,只有_A____模式不可以自由地改变处理器的工作模式。
A、用户模式(User)B、系统模式(System)C、终止模式(Abort)D、中断模式(IRQ)11.在ARM的汇编程序中,ADR、ADRL、C、D等被称为伪指令。
arm面试题1. ARM架构简介ARM是一种广泛应用的32位精简指令集计算机(RISC)架构。
它是一种低功耗、高性能的架构,被广泛应用于各种移动设备、嵌入式系统和物联网设备中。
ARM架构具有良好的可扩展性和代码兼容性,使它成为许多领域的首选架构。
2. ARM处理器家族ARM处理器家族包括了许多不同的产品系列,其中包括Cortex-A、Cortex-R和Cortex-M系列。
Cortex-A系列是面向高性能应用的处理器,广泛应用于智能手机、平板电脑和低功耗服务器等领域。
Cortex-R系列是面向实时嵌入式应用的处理器,适用于自动驾驶、工业控制和医疗设备等要求高可靠性和实时性的场景。
Cortex-M系列是面向低功耗和成本敏感的嵌入式应用的处理器,被广泛应用于物联网设备、传感器和智能家居等领域。
3. ARM体系结构特点ARM体系结构具有以下特点:(1) 精简指令集:ARM指令集设计简洁高效,可以更好地利用CPU核心的性能,提高指令执行效率。
(2) 低功耗设计:ARM架构在设计上注重低功耗性能,可以延长电池寿命,降低设备能耗。
(3) 强大的复用性:ARM处理器的设计允许各种不同规模级别的集成电路设计,可以满足不同类型设备的需求。
(4) 高度兼容性:ARM处理器具有良好的代码兼容性,可以在不同版本的处理器上运行相同的软件。
(5) 开放的生态系统:ARM架构拥有庞大的开发者社区和软件生态系统,提供丰富的软件工具和开发支持。
4. ARM内核技术与设计ARM内核技术与设计是指ARM处理器核心的设计和实现。
ARM 处理器核心是整个处理器的核心组成部分,决定了处理器的性能、功耗和功能。
ARM处理器核心的设计涉及到指令集架构、流水线设计、储存器体系结构、协处理器设计等方面。
5. ARM应用场景和前景ARM处理器以其高性能、低功耗和广泛的应用领域而被广泛应用于各个领域。
在移动领域,ARM处理器被广泛应用于智能手机和平板电脑等设备。
ARM知识复习题(带参考答案)请在正确的选项后点击,错选、多选、少选或不选均不得分。
1.[单选题]ARM的全称是什么? AA:Advanced RISR MachinesB:A Run MachineC:Advanced Research ManD:Addressed Red Middle2.[单选题]ARM芯片采用什么样的体系结构?AA:RISCB:CISCC:x86D:MIPS3.[单选题]ARM的指令执行靠什么驱动? AA:流水线B:微代码C:电容放电D:电磁感应4.[单选题]ARM使用什么样的总线协议? AA:AMBAB:CANC:1553b总线D:TCP/IP5.[单选题]ARM采用多少位的体系结构? BA:64位B:32位C:16位D:8位6.[单选题]根据ARM命名规则,ARM7TDMI的D代表什么意思?AA:debugB:支持Thumb指令C:多媒体处理D:支持Jazelle加速7.[单选题]根据ARM命名规则,ARM7TDMI的T代表什么意思?BA:debugB:支持Thumb指令C:多媒体处D:支持Jazelle加速8.[单选题]Intel生产的ARM芯片叫什么? DA:PowerPCB:MIPSC:FirecoldD:xscale9.[单选题]ARM体系结构中共有多少个物理寄存器? AA:37个B:10个C:12个D:72个10.[单选题]ARM使用那个寄存器存放程序的返回地址? AA:R14B:r12C:cpsrD:spsr11.[单选题]用户模式下的可见通用寄存器个数为多少个? BA:37个B:16个C:38个D:39个12.[单选题]当前程序状态字寄存器的名称是什么? AA:CPSRB:SPSRC:MCRD:MSR13.[单选题]ARM共有几种处理器模式? AA:7B:8C:9D:1014.[单选题]ARM用于响应快速外部中断的处理器模式叫什么? A A:FIQB:IRQC:数据异常D:SWI15.[单选题]ARM上电后进入哪种模式? BA:FIQ模式B:管理模式C:IRQ模式D:数据异常模式16.[单选题]当程序直接改写cpsr来切换模式时,cpsr会被复制到spsr? BA:会B:不会C:根据程序的执行状态决定是否影响D:根据执行的指令决定是否影响17.[单选题]Thumb指令集的长度是多少?AA:16B:32C:64D:7218.[单选题]ARM的启动向量? BA:0xffffffffB:0x00000000C:0x11110000D:0000ffff19.[单选题]提供了安全解决方案的ARM系列产品是以下系列中的哪一种? BA:PowerPCB:SecurCoreC:OMAP20.[单选题]ARM处理模式中,除以下那一种其他模式均为特权模式? AA:用户模式B:管理模式C:IRQ模式D:数据异常模式21.[单选题]当处理器访问存储器失败时,将发生哪种异常? AA:Data AbortB:指令预取异常C:IRQ中断请求D:FIQ中断请求22.[单选题]各种模式下通用的寄存器有那些? AA:r0~r7B:r0~r12C:r0~r37D:r0~r423.[单选题]程序员可见的寄存器有哪些? BA:r0~r15B:r0~r15、cpsrC:r0~r15、cpsr、spsrD:r0~r3724.[单选题]通常用作堆栈指针的寄存器叫什么名字? AB:r14C:r15D:cpsr25.[单选题]通常用来保存子程序返回地址的连接寄存器叫什么?BA:r1B:r14C:spsrD:cpsr26.[单选题]下列那个寄存器被当作程序计数器pc? DA:r12B:r13C:r14D:r1527.[单选题]程序状态寄存器CPSR的C位表示什么? CA:运算结果为负B:运算结果为0C:运算结果产生进位D:结果溢出28.[单选题]如何禁止IRQ中断? AA:将CPSR寄存器的I位置1B:将CPSR寄存器的F位置1C:将CPSR寄存器的T位置1D:将CPSR寄存器的C位置129.[单选题]正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器的值加多少字节?DA:1字节B:2字节C:3字节D:4字节30.[单选题]ARM上电执行下列哪种异常? AA:ResetB:未定义指令C:IRQD:FIQ31.[单选题]ARM中哪个异常优先级最高? AA:ResetB:未定义指令C:IRQD:FIQ32.[单选题]处理器上电默认进入哪种状态? AA:ARMB:ThumbC:JazelleD:由芯片的硬件连线决定33.[单选题]使用单一平板地址的ARM地址空间,最大寻址空间为多少? BA:2GB:4GC:1G34.[单选题]什么样的ARM指令可以条件执行? AA:所有的B:部分C:极少数D:没有35.[单选题]条件指令助记符EQ代表什么? BA:不相等B:相等C:大于D:等于36.[单选题]ARM中位于主存储器和内核之间的快速存储器叫什么?AA:CacheB:MMUC:MPUD:SDRAM37.[单选题]下列处理器的处理速度,哪个更接近ARM9? BA:80MHzB:150MHzC:260MHzD:335MHz38.[单选题]下列所列出的指令条件执行的助记符,哪一个代表不相等? AA:NEC:GED:LT39.[单选题]指令的三级流水线中,预取阶段完成的任务是? AA:从存储器装载一条指令B:识别将被执行的指令C:ALU处理指令D:把结果写会计算器40.[单选题]ARM9使用几级流水线? CA:3级B:4级C:5级D:6级41.[单选题]ARM汇编指令中,用于实现加法运算的是哪条指令?AA:ADDB:SUBC:MULD:MOV42.[单选题]ARM汇编指令中,用于实现减法运算的是哪条指令?BA:ADDB:SUBC:MULD:MOV43.[单选题]ARM汇编指令中,用于实现乘法运算的是哪条指令?CA:ADDB:SUBC:MULD:MOV44.[单选题]ARM汇编指令中,用于实现寄存器数据搬移操作的是哪条指令? DA:ADDB:SUBC:MULD:MOV45.[单选题]下面所列指令,哪一条指令语法格式正确? BA:ADD r1,r2B:ADD r1,r2,r3C:MOV r1,r2,r3D:LDR r1,r246.[单选题]ARM汇编指令中,用于实现64位无符号乘法运算的是哪条指令? AA:UMULLB:UMLALC:MULD:MOV47.[单选题]ARM汇编语言中,用于实现软中断的是哪条指令? CA:ADDB:SUBC:SWID:MOV48.[单选题]中断向量表中(假设中断向量表起始地址在0x0),软中断的中断向量是多少? CA:0x00B:0x04C:0x08D:0x0c49.[单选题]CMP指令用于实现什么功能? AA:32位数比较B:切换跳转C:断点指令D:零计数50.[单选题]ARM指令中对立即数的操作有一定限制,下面所列立即数中,属于合法立即数的是哪一个? DA:0x101B:0x102C:0xff1D:0xff51.[单选题]指令MOV r0,r1,LSL,#3中,LSL的作用是? BA:算术右移B:逻辑左移C:逻辑右移D:循环右移52.[单选题]下列哪条指令可以实现r1=r0×3? AA:ADD r1,r0,r0,LSL #1B:ADD r1,r0,r0,LSL #3C:MOV r1, r0,LSL #1D:MOV r1,r0,LSL #353.[单选题]默认情况下,数据处理指令是否影响程序状态字寄存器? CA:影响B:不影响C:根据指令的不同,影响情况不同D:根据程序执行状态,决定是否影响程序状态字寄存器54.[单选题]下列判断中,对ARM指令集和Thumb指令集的关系描述正确的是? BA:ARM指令集是Thumb指令集的子集B:Thumb指令集是ARM指令集的子集C:Thumb指令集是ARM指令集的补充D:ARM指令集是Thumb指令集的补充55.[单选题]Thumb指令集的长度是多少? BA:32位B:16位C:除MOV指令32位外,其他指令均为16位D:可以通过编译器的选项设定其是16位还是32位56.[单选题]ARM处理器中的哪个部分可以实现物理地址到虚拟地址的映射?DA:ALUB:桶型移位寄存器C:CacheD:MMU57.[单选题]ARM中规定了一些子程序间调用的基本规则,该规则名称是什么? AA:ATPCSB:TPACSC:APCSTD:ACSTP58.[单选题]ATPCS中规定,使用哪个寄存器存放程序的返回地址?AA:r14B:r13C:cpsrD:spsr59.[单选题]ATPCS中规定,使用哪个寄存器存放堆栈基地址? BA:r14B:r13C:cpsrD:spsr60.[单选题]ATPCS中规定,用哪些寄存器传递参数? AA:r0~r3B:r0~r8C:r8~r12D:r0~r1261.[单选题]下列描述中,哪些是正确的?(都不正确)A:ARM不包含除法硬件B:ARM9以后的版本中包含除法硬件C:ARM中的除法交给协处理器完成D:ARM体系结构中专门的除法逻辑62.[单选题]下列哪个指令可以实现处理器的状态转移? CA:BB:BLC:BXD:MOV63.[单选题]外部中断发生时,处理器进入哪种状态? AA:ARMB:ThumbC:JazelleD:由芯片的硬件连线决定64.[单选题]下列哪条指令可以实现把r0中的数据保存到内存单元(r1+100)中? AA:STR r0,[r1,#100]B:STR r0,[r1,#200]C:STR r0,[r1,#300]D:STRr0,[r1,#400]65.[单选题]对MMU和MPU的区别描述正确的是? DA:MPU除有内存单元保护功能外,还具有虚拟地址到物理地址的映射功能B:两种功能相同,可以在不同的芯片上集成不同的模块C:MMU的功耗比MPU低D:MMU除有内存单元保护功能外,还具有虚拟地址到物理地址的映射功能66.[单选题]指令MOV r1,#0x09正确执行后,r1的结果是多少?(A、B)A:9B:0x09C:结构不可知D:不同的ARM版本,执行的结构不一样67.[单选题]下列哪条指令,可以实现将地址单元(r1+r2×4)的数据读到r0? AA:LDR r0,[r1,r2,LSL ×2]B:LDR r0,[r2,r1,LSL ×2]C:STR r0,[r1,r2,LSL ×2]D:STR r0,[r2,r1,LSL ×2]68.[单选题]下面哪条指令使用了ARM中的桶型移位寄存器? CA:LDR r0,[r1, #2]B:LDR r0,[r2]C:STR r0,[r1,r2,LSL #2]D:STR r0,[r2, #2]!69.[单选题]假设r0=0x01,r1=0x03,正确执行ADD r0,r0,r1后,r0的值为? DA:0x01B:0x02C:0x03D:0x0470.[单选题]CPSR寄存器的作用是什么? AA:存储当前的处理器状态B:程序计数寄存器C:中断状态寄存器D:堆栈指针寄存器71.[单选题]中断向量表中(假设中断向量表起始地址在0x00),位于0x08地址的中断是什么?DA:FIQB:IRQC:Data AbortD:SWI72.[单选题]ARM上的外设中断,通常产生哪种异常? BA:FIQB:IRQC:Data AbortD:SWI73.[单选题]假设r0=0x05,r1=0x03,正确执行SUB r0,r0,r1后,r0的值为? BA:0x01B:0x02C:0x03D:0x0474.[单选题]假设r0=0x01,r1=0x03,正确执行ADD r0,r0,r1 LSL #1后,r0的值为?CA:0x05B:0x06C:0x07D:0x0875.[单选题]假设r0=0x01,r1=0x03,正确执行MOV r0,r1后,r0的值为?CA:0x01B:0x02C:0x03D:0x0476.[单选题]假设r0=0x01,r1=0x03,正确执行MOV r0,r1 LSL #1后,r0的值为? BA:0x05B:0x06C:0x07D:0x0877.[单选题]ARM上实现内存管理的单元叫什么? AA:MMUB:CacheC:MPUD:VFP78.[单选题]下列哪些指令可以协处理器的访问? AA:MRCB:ADDC:LDRD:STM79.[单选题]下列哪条指令执行完成后,可以影响程序的标志状态寄存器? BA:MOV r1,r2B:CMP r1,r2C:ADD r0,r1,r2D:SUB r0,r1,r280.[多选题]ARM支持哪几种指令集? ABA:ARMB:thumbC:JavaD:x8681.[多选题]ARM内核有几种状态? ABA:ARM状态B:Thumb状态C:Jazelle状态D:中断状态82.[多选题]ARM的3级流水线包括哪几个阶段? ABCA:取址B:译码C:执行D:运算83.[多选题]下列哪些指令可以放在向量表中? ABCDA:跳转指令B:MOV指令C:LDR指令D:ADD指令84.[多选题]ARM处理器有两个级别的中断请求,他们分别是?ABA:IRQB:FIQC:AbortD:Reset85.[多选题]ARM上实现内存管理的单元叫什么? AA:MMUB:cp15C:MPUD:VFP86.[多选题]下列指令中,哪些指令可以实现程序的跳转? ABCDA:BB:BLC:BXD:BLX87.[多选题]下列指令中可以实现多寄存器传送的指令有哪些? ABA:LDMB:STMC:LDRD:STR88.[多选题]多寄存器传送指令LDM/STM有哪几种寻址方式?ABCDA:IA(Increment After)事后增址B:IB(Increment Before)事先增址C:DA(Decrement After)事后递减D:DB(Decrement Before)事先递减89.[多选题]下列哪些指令可以实现对协处理器的访问? ABA:MRCB:MCRC:LDRD:STM90.[多选题]下列哪个指令可以实现处理器的状态转移? CDA:BB:BLC:BXD:BLX91.[多选题]ARM异常包括? ABCDA:复位B:未定义指令C:数据异常D:软件异常92.[多选题]下列哪些指令可以实现把r0中的子数据保存到内存单元(r1+100)中? ABA:STR r0,[r1,#100]B:STR r0,[r1,#100]!C:STR r0,[r1],#100D:STR r0,[r1,#400]93.[多选题]下列指令执行完成后,使寄存器r1的值发生变化的是哪些? BCA:STR r0,[r1,#100]B:STR r0,[r1,#100]!C:STR r0,[r1],#100D:STR r0,[r1,#400]94.[多选题]下列哪条指令没有使用ARM中的桶型移位寄存器?ADA:LDR r0,[r1, #2]B:LDR r0,[r2,r1,LSL #2]C:STR r0,[r1,r2,LSL #2]D:STR r0,[r2, #2]!95.[多选题]ARM的中断向量号可以位于什么地址上? ADA:0x00000000B:0xffffffffC:0x0000ffffD:ffff000096.[多选题]下列描述中,哪些不正确的是哪些? ABCDA:ARM不包含除法硬件B:ARM9以后的版本中包含除法硬件C:ARM中的除法交给协处理器完成D:ARM体系结构中专门的除法逻辑97.[多选题]下列哪些指令执行完成后,可以影响程序的标志状态寄存器? BCA:MOV r1,r2B:CMP r1,r2C:ADDS r0,r1,r2D:SUB r0,r1,r298.[多选题]对CPSR寄存器的作用描述不正确的是?BCDA:存储当前的处理器状态B:程序计数寄存器C:中断状态寄存器D:堆栈指针寄存器99.[多选题]下列哪些指令可以访问程序状态寄存器? AA:MRSB:MCSC:LDRD:STM100.[多选题]下列指令执行完成后,使寄存器r0的值没有发生变化的是哪些? ADA:STR r1,[r0,#100]B:STR r1,[r0,#100]!C:STR r1,[r0],#100D:STR r1,[r0,#400]。
ARM嵌入式系统基础教程简答题1、简述通用计算机和嵌入式系统的主要区别?答:通用计算机主要应用于数值计算、信息处理;而嵌入式系统主要应用于控制领域,体积小,应用灵活。
2、简述MCU的基本含义是什么?答:在一块芯片上集成了MPU、存储器、各种I/O端口和定时器/计数器的比较完整的芯片级计算机。
3、简述MCU和DSP的差异?答:MCU(微控制单元)主要偏重于传输控制,DSP(数字信号处理)主要偏重于信号处理与运算。
4、简述嵌入式系统的定义、应用和特点?答:嵌入式系统定义:以应用为中心,以计算机技术为基础,其软硬件可裁剪配置,对功能、可靠性、成本、体积、功耗有严格约束的一种专用计算机系统。
嵌入式系统应用:应用于军事设备、信息终端、汽车电子、制造工业、航天航空等领域。
嵌入式系统特点:专用性、可裁性、实时性好、可靠性高、功耗低。
5、简述嵌入式系统的软硬件结构?答:嵌入式系统软件包括:设备驱动接口(DDI)、实时操作系统(RTOS)、可编程应用接口(API)和应用软件。
嵌入式系统硬件包括:微处理器、外围电路和外设。
6、嵌入式处理器有那几种?它们有什么不同?答:嵌入式处理器的种类有:MCU(微控制单元)、MPU(微处理器)、DSP(数字信号处理)、SoC(片上系统)。
不同:MCU是集成了MPU、存储器、I/O端口和定时器/计数器的比较完整的计算机;MPU偏重于传输控制;DSP偏重于信号处理与运算;而SoC则是片上系统。
7、简述ARM和S3C2410之间的关系?答:S3C2410是由三星公司生产的,采用的是ARM公司的ARM920T内核+外围电路+AMBA总线+SDRAM(4K)+I/O组成,是一个MCU。
ARM则是由ARM公司生产的一类MPU,是对一类MPU的通称。
8、简述S3C2410的包括的硬件资源?答:S3C2410包括了以下组件:16KB的指令和数据CACHE,处理虚拟存储器管理的MMU,支持STN和TFT的LCD控制器,NAND FLASH的系统引导器,SDRAM控制器,触摸屏接口,USB接口,PLL时钟产生器,一个通道的USB从接口,4通道的PWM定时器和一个通道的内部定时器,带有看门狗定时器,117个通用IO口,包括24个外部中断源,内部集成8通道ADC10、简述ls、cd、mkdir、ifconfig、ping、mount、chmod、passwd和adduser等命令的功能是什么?答:ls:显示当前目录下的文件和子目录;cd:改变当前目录;mkdir:新建子目录;ifconfig:显示网卡信息;ping:测试本机与目标主机的网络连通性;mount:对文件系统进行挂载;chmod:修改文件或目录的权限;passwd:设置用户密码;adduser:新建用户11、在linux操作系统的命令行界面,提示符[root@localhost arm2410s]#的意思是什么?答:root表示用户名;localhost表示主机名;arm2410表示当前目录名;#表示超级用户提示符。
一、选择题(选15题,每小题2分,共30分)1. ARM 属于(A )[A] RISC 架构[B] CISC架构2. ARM 指令集是(C)位宽,Thumb 指令集是(B)位宽的。
[A] 8位[B] 16 位[C] 32位[D] 64位3. ARM 指令集是(H )字节对齐,Thumb 指令集是(F )字节对齐的[E] 1[F] 2 [G] 3 [H] 44. 复位后,ARM处理器处于(B )模式,(D )状态[A] User[B] SVC [C] System [D] ARM [E] Thumb5. ARM处理器总共(E )个寄存器,System模式下使用(A )个寄存器,SVC模式下使用( B )个寄存器。
[A] 17个[B] 18个[C] 32个[D] 36个[E] 37个6. ARM处理器中优先级别最高的异常为(E ),(AC )异常可以用来相应中断[A] FIQ[B] SWI [C] IRQ [D] SVC [E] RESET7. ARM数据处理指令中有效的立即数是(ACEGH )[A] 0X00AB0000[B] 0X0000FFFF [C ] 0XF000000F [D ] 0X08000012[E] 0X00001F80 [F] 0XFFFFFFFF [G] 0 [H] 0XFF0000008. ATPCS规定中,推荐子函数参数最大为(D )个[A] 1[B] 2 [C ] 3 [D ] 49. ATPCS规定中,栈是(B )[A] 满加[B] 满减[C ] 空加[D ] 空减10. 在用ARM汇编编程是,其寄存器有多个别名,通常PC是指(D ),LR 是指(C ),SP是指(B )[A] R12[B] R13 [C ] R14 [D ] R1511. CPSR寄存器中反映处理器状态的位是(D )[A] J位[B] I位[C ] F位[D ] T位12. 下面属于ARM 子程序调用指令的是(C )[A] B[B] BX [C ] BL [D ] MOV13. ARM7属于(A )结构,ARM9属于(B )结构。
Q:单步调试i2cINT.C 在ISendStr 中启动总线后,程序怎么又跑到vectors.o 中,进行初始化了呢A:由于VIC 的限制,程序不能在0x18 停下来,否则执行非向量中断.如果没有设置,则非向量中断为0,将从0 地址执行.建议:有中断时不要单步执行程序,可以手动暂时关中断或设置断点代替单步.(编者注:下载最新的驱动可以解决这个问题)第102 问:Q:请教:如何修改ADS 的启动代码,从__main 到main,按道理应该有一个文件,修改这个小文件, 就可以修改启动代码.A:__main 是ADS 运行库,最好不要修改,要是不使用库就不要用main()函数,起个别的名字.直接跳转过去就行了.详见:《ARM 体系结构与编程》P328.第103 问:Q:我在JTAG 仿真时出现的对话框,提示:Warnning! interrupt vectors data is not correct!Program you downloaded can not run freely!A:参见《ARM 微控制器基础与实战》附录一第一个问题的第二部分,选择源代码的启动代码文件夹下的vectors.s,并参照《ARM 微控制器基础与实战》图7.11 设置.第104 问:Q:初始化代码中分配堆栈的问题MSR CPSR_c, #0xd3 ;进入特定的处理器模式LDR SP, StackSvc ;给当前处理器模式的堆栈指针赋值,这只是一个值而已,;他在接下去的DCD 语句赋值SvcStackSpace SPACE SVC_STACK_LEGTH * 4这个语句开辟一个SVC_STACK_LEGTH * 4 大小的内存,SvcStackSpace 是这块内存的标号,我想应该就是内存的首地址,这样应该好理解了.StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4这个语句就是把这个首地址加上堆栈大小值.A:计算出堆栈指针来,我想这个堆栈是向下生长的,所以SP 赋值的是堆栈地址最高的那个. 第105 问:Q:请问启动代码中这句是什么意思24__user_initial_stackheapLDR r0,=bottom_of_heapMOV pc,lr;AREA Myheap, DATA, NOINIT, ALIGN=2bottom_of_heap SPACE 256 ;库函数的堆空间我的问题是:1.这个函数在哪里被调用2.赋值给r0 以后就完事了r0 起什么作用A:堆和栈的分配函数,由ADS 提供的初始化代码调用,具体参考配套《ARM 微控制器基础与实战》的相关部分.Q:2104 的启动代码是否适用2124 呢网站上下载的那个easyarm2104 工程模版里面写着arm executable imag for lpc21**,是否说也适用2124 呢如果不行,哪些地方需要修改希望能够指点一下!A:您可以下载2100 的工程模板.第107 问:Q:我在用ARM 的IAP 功能,要把已经烧到flash 中的数据写到RAM 中,我是这么写的: uint32 *q,data;q = 0x00006000;data = *q;这是要读的flash 的起始地址,但是第二句编译出错,我想应该是C 编译器不许给指针直接赋值, 我用汇编解决了这个简单的问题,但是怎么用C 来解决呢A:q = (uint32 *)0x00006000;第108 问:Q:问一个有关汇编的基础问题.例程: ANDS R1,R1,#0x0400BEQ W AITOK请问ANDS 是如何影响标志位的,而BEQ 判断的是那两个操作数相等时执行A:R1&0x0400 => R1,若结果为0(即R1 为0),则标志位Z=1.当Z=1 时,BEQ W AITOK 有效执行.第109 问:Q:请教:在ADS 中怎么给某个变量确定固定物理地址就是类似KEIL 中的XDA TA xxx _AT_ 0x4456 的功能.A:使用分散加载机制,mem_c.scf 等就是例子.25第110 问:Q:哪里有介绍ARM 的C 语言编程的A:其实大多数嵌入式系统的C 语言都差不多,可找一本写嵌入式C 语言的书即可.第111 问:Q:请问在系统复位后首先执行的是否为Boot Block 的中断向量然后由boot block 里面的程序决定是执行用户程序还是ISP 程序.那么这时启动的boot block 里的中断向量表和用户程序里的中断向量表是如何在flash 里安排的在《ARM 微控制器基础与实战》上看到的是复位后boot 扇区的最低64 字节出现在0x00000000 区域,那用户的中断向量表应该在哪个区域产品中一般为0x00000000,在开发板中重启后实际为boot block 的中断向量地址,对吗A:看一看3.3.6 节.产品中一般为物理0 地址处.第112 问:Q:《ARM 微控制器基础与实战》上有一段程序:uint32 i;i = VICIRQStatus;i = IOSET;请问:为何先要读取VICIRQStatus 的值,才能读IOSET 的值A:读出VICIRQStatus 只是为了方便观察当前VICIRQStatus 的值,没其它用途.第113 问:Q:请问处理器在什么情况下处于用户模式多谢!A:需要你去设置CPSR 寄存器.用户程序前台程序一般在用户模式/系统模式下运行.第114 问:Q:在EINT1_LED.S 中的倒数第二行有一个单独的B 指令,它是什么含义多谢!A:是"B .",跳转到当前地址,即死循环,与以下代码等效:HALT B HALT第115 问:Q:模板里到底有些什么A:起动代码,相关编译链接设置.起动代码是用来初始化系统的程序,如Startup.s,target.c,stack.s 等等.26第116 问:Q:今天试用了工程模板.使用了ARM Executable Image for lpc21xx 建了个项目,看了下启动文件与原来的不同了,用了个《ARM 微控制器基础与实战》上的例程来作试验,用的是time0 定时中断来亮灯的程序,用的例程的TargetInit()和int main(void);修改了用户堆栈和bottom_of_heap 的长度,程序能运行,但不能产生中断,time0 和VIC初始化的是正确的,是什么原因用工程模板建立的项目文件夹的src 中多了几个文件,其中的mem_a.scf,mem_b.scf,mem_c.scf,怎样才能导入到项目中来谢谢!A:原来startup.s 默认是关了中断的!第117 问:Q:在easyarm 2104 的配套光盘中的IAP 例子中,定义了一个函数指针void (*IAP_Entry)(uint32 param_tab[], uint32 result_tab[]);我看不懂,这个函数和普通的函数定义方法不一样,尤其是(*IAP_Entry),大家教教我.A:这是一个指向函数的指针!!第118 问:Q:变量定义中volatile 是什么意思请大侠告诉我一下《ARM 微控制器基础与实战》上c 语言定义变量时出现了volatile,不知道是做什么用的.C 语言里好像没有这个语法阿!A:告诉编译器不要优化掉,volatile 是易变的意思.第119 问:Q:请问ARM 中的一个编译方面碰到的问题.在ARM 地汇编语言中,有条件编译伪指令IF..ELSE...ENDIF;而在C 语言中,有相应的条件编译伪指令#IF...#ELSE...#ENDIF,在较大的程序设计中,往往需要对整个程序进行条件编译.我要问的问题是:我在CONFIG.H 中设置一个编译开关,对所有的C 文件进行条件编译是有效的, 因为每个C 文件中都有一个语句:#include "config.h",我如何将该编译开关的信息传递给汇编语言文件,如VECYORS.SA:好像没有直接的方法,可以编写一个CONFIG.INC 来管理汇编程序的配置.27第3 章操作系统第120 问:Q:在SWI_Exception 的0x40 中的_OSFunctionAddr[regs[0]]中的Regs[0]指的是堆栈中的R0 还是其它A:是堆栈中的R0.第121 问:Q:《ARM 微控制器基础与实战》中在ucos 移植中说C 语言无法保证堆栈的结构,请问这是什么含义A:就是不能保证有哪些寄存器入栈及寄存器入栈的顺序.第122 问:Q:请问斑竹OSNeedToSwapContext 在哪个文件里声明的,我找不到A:这是要删除的,我的OS_CPU_C.C 中函数OSIntCtxSw:void OSIntCtxSw (void){}第123 问:Q:我的情况如下:我自己制作了一个硬件模块,用的是lpc2214,现在需要将ucos-ii 移植到上面去.我用板子做ZLG 公司提供的实验,是可以做的,如led 灯等,按道理说串口等硬件应该没有问题,然后我就做公司提供的那三个移植实例:ex2_arm.编译等是通过的,生成了hex 文件,下载到flash 中,运行easyarm,但是没有任何显示,不知道是什么问题,应该是硬件上呢,还是其他的A:这主要是RAM 的问题,请用我们的工程模板,并选择在FALSH 中调试,如果编译通过,则一般行, 否则请减少任务堆栈的大小.第124 问:Q:下载了工程模板以后,将工程模板目录下的文件都拷贝到了stationary 目录下,然后建立了一个ARM Executable Image for UCOSII(for lpc21xx)的工程,在PROJECT 目录下的文件结构如下:28test.cinlcudes.hsrc->config.h,heap.s,includes.h,irq.s,lpc2294.h,lpc2106.h,mem_a.scf,os_cfg.s,stack.s,startup.starget.c,target.h,ucos_ii.c,ucos_ii.h,arm->os_cpu.h,os_cup_a.s,os_cup_c.cuCOS->ucos 源文件arm_pc->pc.h,pc.c编译可以通过,但是MAKE 时提示:ERROR:Execution region IRAM overlaps with Execution region STACKS.如果我表述得不是很清楚的话,那么可否告诉我工程模板到底怎么操作,怎样才能把例子在ARM2104 上跑起来.A:RAM 占用太大,请在flash 中调试,并减少任务堆栈的大小.第125 问:Q:我改了以下SCF 文件,把堆栈的值设置大了一些,但是还是出现以前的老问题,那就是程序跑到TargetResetInit()函数处后就跳到取数据终止的异常中断去了.A:不能把堆栈设置到内部RAM 之外.第126 问:Q:新旧任务级的切换是不是必须在管理模式下切换切换后新任务的运行是不是必须在管理模式下A:在配套《ARM 微控制器基础与实战》里的任务切换是通过SWI 实现的.SWI 会使CPU 进入管理模式.同时CPU 自动将任务的CPSR 保存到管理模式的SPSR 中.SWI 程序还保存了一些寄存器到管理模式的堆栈中.然后任务切换程序会在管理模式和系统模式间来回切换,目的是把保存在管理模式堆栈的寄存器内容拷贝到任务的堆栈中(注意:任务是运行在用户模式或系统模式的,这两个模式使用同一个SP,这时的系统模式的SP 指向的就是任务的堆栈),也会将管理模式的SPSR 拷贝到任务堆栈(注意管理模式的SPSR 就是在执行SWI 时CPU 自动保存的任务运行时的CPSR,它记录了任务运行的CPU 模式和其他的运行状态信息).最后把任务模式SP 保存到任务的任务控制块中(注意此时CPU 已经是运行在系统模式下的了).以上大致就是uC/OS-II 中所说的保存任务运行环境的工作.任务的恢复运行就比较好理解了.接着前面的说,CPU 还在系统模式下.程序从任务控制块中得到任务的堆栈指针. (OSIntCtxSw_1 的第一句)将这个指针的值加上一定的偏移量保存到SP 中.为什么要加上一定的偏移量呢因为这时任务的堆栈中除了保存任务运行时的数据外还保存了任务的上下文,即任务切换时保存的CPU 寄存器等内容.而我们恢复任务等一下是在管理模式下进行的,用的是管理模式的堆栈指针.等恢复任务后CPU 就开始执行任务29代码了.我们已经没有机会再修改系统模式下的SP 值了.所以在这个时候就应该对SP进行调整.调整的大小就应该是所保存的上下文占用的大小.从堆栈中恢复LR 的值.同样的道理,管理模式和系统模式使用不同的LR,在切换到管理模式之前,必须先在系统模式下恢复任务运行时的LR.(OSIntCtxSw_1 的第三句)接下来就切换到管理模式了. (OSIntCtxSw_1 的第四句)使管理模式SP 指向任务堆栈(第五句)注意这是没调整过的任务SP,也就是保存了上下文环境的SP.接下来的事情就真的很简单了.从堆栈中恢复出保存的东西.先是OSEnterSum,然后是任务的CPSR (注意任务的CPSR 就是进入SWI 时由CPU 自动保存到管理模式的SPSR 中的,所以此时也是恢复到管理模式的SPSR 中)最后一句就是典型的中断返回语句了.恢复寄存器,恢复PC,加了一个^号意味着同时将SPSR 拷贝到CPSR 中.现在是回答你的问题的时候了.切换前任务是运行在什么环境下的(包括CPU 模式,所有的寄存器),任务切换后任务就是运行在什么环境下的.对任务来说,什么也没改变.只有PC 值指向了下一条指令,哈哈.第127 问:Q:请教:在rtos51 解释的概念里的"信号量"比较难懂,"消息队列"可以理解为任务之间互相传递的参数,但"信号量"怎样理解呢具体一点,谢谢!A:信号量是60 年代中期Edgser dijkstra 发明的,它实际上是一种程序间的约定机制,这种约定决定那个程序(任务)可以执行.在多任务内核中普遍使用信号量用于:1.控制共享资源的使用权(满足互斥条件);2.标志某事件的发生;3.使两个任务的行为同步.信号量像是通行证,且通行证的数目是有限的.任务要运行下去,要先拿到通行证.如果信号量已被别的任务占用,该任务只得被挂起,直到信号量被当前使用者释放掉.信号量的值可以是0 到255 或0 到65535,或0 到4294967295,取决于信号量规约机制使用的是8 位,16 位还是32 位.到底是几位,实际上是取决于用的那种内核.根据信号量的值,内核跟踪那些等待信号量的任务.一般地说,对信号量只能实施三种操作:初始化,也可称作建立;等信号也可称作挂起;给信号或发信号.信号量初始化时要给信号量赋初值,等待信号量的任务表应清为空.想要得到信号量的任务执行等待操作.如果该信号量有效(即信号量值大于0),则信号量值减1,任务得以继续运行.如果信号量的值为0,等待信号量的任务就被列入等待信号量任务表.多数内核允许用户定义等待超时,如果等待时间超过了某一设定值时,该信号量还是无效,则等待信号量的任务进入就绪态准备运行,并返回出错代码(指出发生了等待超时错误).任务以发信号操作释放信号量.如果没有任务在等待信号量,信号量的值仅仅是简单地加1.如果有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1.于是通行证给了等待信号量的诸任务中的一个任务.至于给了那个任务,要看内核是如何调度的.收到信号量的任务可能是以下两者之一:1.等待信号量任务中优先级最高的任务;2.最早开始等待信号量的那个任务,即按先进先出的原则(FIFO).30有的内核有选择项,允许用户在信号量初始化时选定上述两种方法中的一种.但SmallRTOS51 只支持优先级法.如果进入就绪态的任务比当前运行的任务优先级高(假设,是当前任务释放的信号量激活了比自己优先级高的任务).则内核做任务切换(假设,使用的是占先式内核),高优先级的任务开始运行.当前任务被挂起.直到又变成就绪态中优先级最高任务.第128 问:Q:我用了两个串口,但当我把程序做大的时候,发现在这个任务里所建立的邮箱失败,我只用一个串口时是没有这种事情的.Uart0ReviceMbox = OSMboxCreate((void *)0 );if (Uart0ReviceMbox == NULL){while (1);}我想问一下有几种可能会造成这种分配失败我的程序存储器用量如下:Total R0 size 22168Total RW size 7956Total ROM size 22168A:在OS_CFG.H 中定义最大事件数,太小的话,分配会失败的.第129 问:Q:在周立功的原例子中,系统代码事先烧到ROM 中,应用代码在RAM 中运行.我想知道, (RAM)应用代码调用系统函数,那么2104 是如何把ROM 中的系统函数的地址传递给RAM, 也就是应用代码和系统代码是如何关联在一起的我猜是通过swi(软中断),应用代码通过swi 调用系统代码,但是swi 中断程序中,是如何获得烧到RAM 中的系统函数的地址哪百思不得其解.A:您看一看romcode 工程中swi 的0x40 和0x41 功能,及Os_call.c,Os_call_arm.s,Usr_call_arm.s.第130 问:Q:16k 的RAM,128 的FLASH ROM 跑uc/os-II 够吗再跑点应用程序够吗A:取决于您的应用程序对RAM 的需求,及代码量.一般程序可以.。