start程序段:
MOV r0, #15 MOV r1, #9 start
;补充代码 stop
B stop END
YESr0=r1?NOstopYESr0>r1?NOr0 = r0 - r1r1 = r1 - r0
程序: Start:
CMP r0,r1 SUBLT r1,r1,r0 SUBGT r0,r0,r1 BNE start
9、 阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。 看门狗定时器控制寄存器(WTCON) 寄存器 WTCON 地 址 0x53000000 读/写 读/写 描 述 看门狗定控制寄存器 描 述 预装比例值,有效范围值为0~255 保留 使能和禁止看门狗定时器 0=禁止看门狗定时器 1=使能看门狗定时器 这两位决定时钟分频因素 00:1/16 01:1/32 10:1/64 11:1/128 中断的禁止和使能 0=禁止中断产生 初 始 值 0x8021 初 始 值 0x80 00 0 WTCON的标识位 WTCON Prescaler Value Reserved Watchdog Timer Bit [15:8] [7:6] [5] Clock Select [4:3] 00 Interrupt Generation [2] 0 Reserved Reset Enable/Disable [1] [0] 1=使能中断产生 保留 禁止很使能看门狗复位信号的输出 1=看门狗复位信号使能 0=看门狗复位信号禁止 0 1 看门狗定时器数据寄存器(WTDAT) 寄 存 地 址 读/写 描 述 初 始 值 器 WTDAT 0x53000004 读/写 看门狗数据寄存器 0x8000 看门狗计数寄存器(WTCNT) 寄 存 地 址 读/写 描 述 初 始 值 器 WTCNT 0x53000008 读/写 看门狗计数器当前值 0x8000 #define rWTCON (*(volatile unsigned *)0x53000000) // 第1行 #define rWTDAT (*(volatile unsigned *)0x53000004) // 第2行 #define rWTCNT (*(volatile unsigned *)0x53000008) // 第3行 void watchdog_test(void) {
rWTCON = ((PCLK/1000000-1)<<8)|(3<<3)|(1<<2); // 第4行 rWTDAT = 7812; // 第5行 rWTCNT = 7812; // 第6行 rWTCON |=(1<<5); // 第7行 }
第1-3 行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT和rWTCNT。
第4 行:设置看门狗的预装比例值为1000000,分频因素为1/128,并使能中断。(6分)
第5-6 行:对数据寄存器和计数寄存器赋值为7812。(2分) 第7 行:启动看门狗。(2分)
7、阅读以下S3C2410部分用户手册.求:当PCLK 或 UCLK 为40 MHz时,串口0的波特率为2400 bps ,串口1的波特率为115200bps,相应的控制寄存器如何设置.
UART BAUD RATE DIVISOR REGISTER
There are three UART baud rate divisor registers(寄存器)including UBRDIV0, UBRDIV1 and UBRDIV2 in the UART block(模块). The value stored in the baud rate divisor register (UBRDIVn), is used to determine the serial Tx/Rx clock rate(baud rate) as follows:
UBRDIVn = (int)(PCLK / (bps x 16) ) –1 or UBRDIVn = (int)(UCLK / (bps x 16) ) –1
Where, the divisor should be from 1 to (216-1) and UCLK should be smaller than PCLK. Register Address R/W Description Reset Value UBRDIV0 UBRDIV1 UBRDIV2 UBRDIVn 0x50000028 R/W 0x50004028 R/W 0x50008028 R/W Bit Description Baud rate divisor register 0 – Baud rate divisor register 1 – Baud rate divisor register 2 – Initial State UBRDIV [15:0] Baud rate division value UBRDIVn >0 – 答: 根据UBRDIVn = (int)(PCLK / (bps x 16) ) –1 寄存器UBRDIV0= (int)(40000000/2400*16)-1=1040=10000010000(B) 寄存器UBRDIV1=( int)(40000000/115200*16)-1=20=10100(B)
任务控制块(TCB)的数据结构OS-TCB表示任务的状态。当任务的CPU控制权被枪战后,任务控制块用来保存该任务的状态。当任务重新获得CPU的控制权后,任务控制块能够保证任务从被中断的位置继续正确执行。 任务控制块提供了任务的基本信息,如任务的执行状态、优先级和堆栈位置等。
四、解答题
1、目前使用的嵌入式操作系统主要有哪些?请举出六种较常用的。
答:Windows CE/Windows Mobile、VxWork、Linux、uCos、Symbian、QN任选六
2、嵌入式开发环境主要包括哪些组件?
嵌入式系统开发需要交叉编译和在线调试的开发环境,主要包括 答:
? 宿主机
? 目标机(评估电路板)
? 基于JTAG的ICD仿真器、或调试监控软件、或在线仿真器ICE
? 运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境 ? 嵌入式操作系统
3、嵌入式系统的BooTLoader的功能是什么?
答:BootLoader是系统加电后、操作系统内核或用户应用程序运行之前,首先必须运行的一段程序代码。通过这段程序,为最终调用操作系统内核、运行用户应用程序准备好正确的环境。(对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,但在系统启动时都必须运行BootLoader,为系统运行准备好软硬件环境。)
4、嵌入式系统开发的基本流程? 答:1)系统定义与需求分析;
2)系统设计方案的初步确立;
3)初步设计方案性价比评估与方案评审论证; 4)完善初步方案、初步方案实施; 5)软硬件集成测试;
6)系统功能性能测试及可靠性测试。
5、指令ADR,ADRL、LDR、NOP是如何处理地址值读入到寄存器中的? 答:ADR是将基于PC或者寄存器的地址值读入到寄存器的,ADR伪指令通常被替换成一条ADD指令或SUB指令来实现该ADR指令的功能。而ADRL伪指令与ADR指令的最大不同之处是,它可以读取更大范围内的地址,而且被编译器替换成2条数据处理指令。LDR将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。NOP在汇编时将被替换成ARM中的空操作。
6嵌入式开发环境主要包括哪些组件?
答:嵌入式系统开发需要交叉编译和在线调试的开发环境,主要包括
? 宿主机
? 目标机(评估电路板)
? 基于JTAG的ICD仿真器、或调试监控软件、或在线仿真器ICE
? 运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境 ? 嵌入式操作系统
7 RM核中什么寄存器用于存储PC?R13通常用来存储什么?R14通常用来存储什么?
答:R15用于程序计数寄存器PC,R13通常用来做堆栈指针寄存器,R14通常用来做链接寄存器,保存函数调用的返回地址
8、Boot Loader在嵌入式系统中主要起什么作用?完成哪些主要的工作?
答:Boot Loader是在嵌入式系统复位启动时,操作系统内核运行前,执行的一段程序。通过Boot Loader,初始化硬件设备,建立内存和I/O空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。
9、简述嵌入式系统的概念、组成及特点。
答:嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁软硬件,适
用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。 其特点有
? 嵌入式系统通常是面向特定应用的 ? 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业
的具体应用相结合后的产物
? 嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余 ? 嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产
品同步进行
? 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存
储器芯片或单片机本身中
? 嵌入式系统本身不具备自举开发能力 10、搭建嵌入式开发环境,连接目标板,一般使用什么通信接口连接?在Windows主机上使用什么软件建立连接?在Linux主机上使用什么软件建立连接?
答:RS-232,以太网口、并口
在Windows主机上使用超级终端软件 在Linux主机上使用Minicom软件
11、进行基于ARM核的嵌入式系统软件开发时,调用如下函数: int do_something(int arg1,void *arg2,char arg3,int *arg4) 则这四个参数通过什么方式从调用程序传入被调函数?
答:基于ARM核的嵌入式系统软件开发时,调用函数和子程序通过R0——R3四个寄存器传递参数,超过四个参数使用堆栈传递。因此arg1通过R0传入, arg2, 通过R1传入,arg3通过R2传入,arg4通过R3传入。 12 ARM体系结构的寄存器组织:37个32位寄存器,其中31个为通用寄存器,
6个为状态寄存器,哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。
ARM微处理器的异常状态:7种异常
ARM处理器有几种工作模式?并做说明每种工作模式的含义。 答:ARM处理器有7种工作模式:
用户模式(usr)- 正常程序执行的模式 0.5分
快速中断模式(fiq)- FIQ异常响应时进入此模式 0.5分 中断模式(irq)- IRQ异常响应时进入此模式 0.5分 管理员模式(svc)- 系统复位和软件中断响应时进入此模式 0.5分 中止模式(abt)- 用于虚拟存储及存储保护 0.5分 系统模式(sys)- 与用户类似,但有直接切换到其它模式等特权 0.5分 未定义模式(und)- 未定义指令异常响应时进入此模式 0.5分 除了用户模式外,其他模式均可视为特权模式 0.5分