嵌入式应用系统设计
初次接触到嵌入式,通过此次实验对嵌入式的内容以及研究的对象有了初始化的理解,这有助于以后对嵌入式的学习。并且本次实验后,明白了嵌入式的开发环境及所用到的开发软件,其次就是对程序的调试与运行,通过实验认真思考其原理知识。本次实验收益匪浅。 五实验参考程序
#NAME asm1_b.s # Author: Embest
#DesARMinstructionexamples
.equ x, 45 /* x=45 */ .equ y, 64 /* y=64 */ .equ z, 87 /* z=87 */
.equstack_top, 0x1000 /* define the top address for stacks */ .global _start .text
_start: /* code start */ mov r0, #x /* put x value into R0 */ mov r0, r0, lsl #8 /* R0 = R0 << 8 */ mov r1, #y /* put y value into R1 */ add r2, r0, r1, lsr #1 /* R2 = (R1>>1) + R0 */ movsp, #0x1000 str r2, [sp]
mov r0, #z /* put z value into R0 */ and r0, r0, #0xFF /* get low 8 bit from R0 */ mov r1, #y /* put y value into R1 */ add r2, r0, r1, lsr #1 /* R2 = (R1>>1) + R0 */ ldr r0, [sp] /* put y value into R1 */ mov r1, #0x01 orr r0, r0, r1
mov r1, R2 /* put y value into R1 */
add r2, r0, r1, lsr #1 /* R2 = (R1>>1) + R0 */ }}
6
嵌入式应用系统设计
实验三 C 语言程序实验一
一.实验目的
? 学会使用Embest IDE 编写简单的 C 语言程序并进行调试。 ? 学会编写和使用命令脚本文件。
? 掌握通过 memory/register/watch/variable 窗口分析判断运行结果。 二.实验设备
? 硬件:PC 机。 ? 软件:Embest IDE Pro 2005 集成开发环境,Windows 98/2000/NT/XP。 三.实验内容
利用命令脚本初始化栈指针,并使用 c 语言完成延时函数。 四.实验操作步骤
1) 参考前面实验创建新的工程(工程名为 C1); 2) 按照参考程序,编写源文件 C1.c 和 C1.cs,并把它们加入工程里面。C1.cs 加在工程根目录即可。
3) 参考前面例子进行标准的设置,其中需要注意的是,在调试 Debug 对话框设置的时候,增加连接后自动执行脚本文件:
4) 参考前面实验步骤进行编译和连接;
5) 下载,打开 Memory/Register/Watch/Variable 窗口,单步执行,通过 memory/register /watch/variable 窗口分析判断结果,在 watch 框中输入要观察变量 I 和变量 J 的值,并记录下来。特别注意在 variable 窗口观察变量 I 的变化并记录下来;
6) 结合实验内容和相关资料,观察程序运行,通过实验; 7) 理解和掌握实验后,完成实验练习题。
五.实验参考程序
1. C1.c 参考源代码:
/******************************************************************************** * File: c1.c * Author: embest * Desc: c language example 1
********************************************************************************/ /* function declare */ void delay(intnTime);
/******************************************************************************** * name: _start * func: entry point
*****************************************************************************/ _start() { inti = 5; for( ; ; ) { delay(i); } }
/******************************************************************************** * name: delay * func: delay some time * para: nTime -- input * ret: none
******************************************************************************/ void delay(nTime) { inti, j = 0; for(i = 0; i 2. C1.cs 参考源代码 stopregwritesp 0x1000 ; initialize the sp , sp = 0x1000 7 嵌入式应用系统设计 六.实验总结 实验截图如下: 8 嵌入式应用系统设计 初次接触到嵌入式,通过此次实验对嵌入式的内容以及研究的对象有了初始化的理解,这有助于以后对嵌入式的学习。并且本次实验后,明白了嵌入式的开发环境及所用到的开发软件,其次就是对程序的调试与运行,通过实验认真思考其原理知识。本次实验受益匪浅。 9 嵌入式应用系统设计 实验四 C 语言程序实验二 一.实验目的 掌握建立基本完整的 ARM 工程,包含启动代码,连接脚本等。了解 ARM9 启动过程,学会使用Embest IDE 编写简单的 C 语言程序和汇编启动代码并进行调试。掌握链接脚本的作用。掌握如何指定代码入口地址与入口点。掌握通过 memory/register/watch/variable 窗口分析判断结果。 二.实验设备 硬件:PC 机。 软件:Embest IDE Pro 2005 集成开发环境,Windows 98/2000/NT/XP。 三实验内容 用 c 语言编写延时函数,使用嵌入汇编 实验原理 1. ARM 异常向量表 当正常的程序执行流程暂时挂起时,称之为异常,例如:处理一个外部的中断请求。在处理异常之前,必须保存当前的处理器状态,以便从异常程序返回时可以继续执行当前的程序。ARM 异常向量表如下: 表 1-4 ARM 异常向量表 地址异常入口模式 0x00000000 Reset 管理 0x00000004 Undefined Instruction 未定义 0x00000008 Software interrupt 管理0x0000000C Prefetch abort 中止 0x00000010 Data abort 中止 0x00000014 Reserved 保留 0x00000018 IRQ IRQ 0x0000001C FIQ FIQ处理器允许多个异常同时发生,这时,处理器会按照固定的顺序进行处理,参照下面的异常优先级。 高优先级: 1 ---- Reset 2 ---- Data abort 3 ---- FIQ 4 ---- IRQ 5 ---- Prefetch abort 低优先级: 6 ---- Undefined Instruction,Software interrupt 由上可见,Reset 入口,即为整个程序的实际入口点。因此,我们在编写代码的时候,第一条语句是在 0x00000000 处开始执行的。一般地,我们使用下面的代码: # --- Setup interrupt / exception vectors B Reset_HandlerUndefined_Handler: B Undefined_HandlerSWI_Handler: B SWI_HandlerPrefetch_Handler: B Prefetch_HandlerAbort_Handler: B Abort_Handler NOP /* Reserved vector */ IRQ_Handler: B IRQ_HandlerFIQ_Handler: B FIQ_HandlerReset_Handler: LDR sp, =0x00002000 2. 链接脚本文件 所有的链接都是通过链接脚本来控制实现的。这些链接脚本文件使用链接命令语言编写。链接脚本的主要作用是描述我们编写的文件中这么多个部分应该如何的相应摆放在输出文件中,并控制存储区如何定位这些输出文件。同时,如果需要,我们还可以使用链接脚本文件实现其它功能。大部分链接脚本文件都是很简单的。简单的链接脚本只有一行命令:SECTIONS。我们使用 SECTIONS 命令来告诉存储区应该如何摆放我们的输出文件。 SECTIONS 命令是一个强大的命令,这里通过一个简单的例子来说明一下。假设程序中包括代码、已经初始化的数据 10