当前位置:文档之家› _基于ARM的嵌入式软件开发

_基于ARM的嵌入式软件开发


用Dhrystone性能进行描
VAX 11/780 作为一个参考
述,计算方法如下:
机,其性能为1 MIP.
Dhrystones/秒=处理器时 钟 * 执行次数)/运行时间
在Demo中,最小运行
VAX 11/780 每秒钟能够完 成1757 Dhrystones .
时间不能小于2秒钟。
1 运行程序步骤
armsd addreg step
2. AXD Debuger的使用
运行程序 添加断点 添加观察点 测试变量内容 测试寄存器 测试内存内容
DEMO 程序功能介绍
是一个Benchmark 程序, MIPS△:
用来测试系统的整形运 算处理性能的高低。
业界用来衡量计算机系统 性能的相对比较量。将
6 从命令行Building项目
1. 从命令行来使用编译器
Compiler name armcc tcc armcpp tcpp
Compiler Source Compiler output variant language
C
C
32-bit ARM code
C
C
16-bit Thumb code
每一步产生的变量变化将反映在variables窗口中
5 测试变量内容(2)
2. 察看变量的地址和内容 1~3. 同前 4. Processor Views → Watch 打开Watch窗口。窗口 可在多个Tab页中察看变量内容 5.点右键,选Add Watch,打开Add Watch窗口, 可以添加需要观察变量 6.按F10,相当于选择Execute → Step单步执行,这 时每一步产生的变量变化将反映在variables窗口中
C++
C or C++ 32-bit ARM code
C++
C or C++ 16-bit Thumb code
1). 编译C文件 main.c :
armcc -g -O1 -c main.c (for ARM)
tcc -g -O1 -c main.c
(for Thumb)
其中:
-g compiler添加debug tables. -O1 compiler 在维护足够的调试信息的同时采用最佳优化算法 -c compiler 只进行编译
8. 修改内存内容
1.选择File → Reload Current Image
2.选择 Execute → Go (或者按 F5),允许到缺 省断点Main
3. 从Search → Memory显示查找内存对话框
4. 双击内存窗口中的内容可以对其进行修改。 5. 按F5可按修改后的内容继续运行程序。
2). 链接映像文件
armlink main.o -o embed.axf
其中: -o 指定链接输出文件名 embed.axf.
3). 用 armsd or AXD 载入映像进行调试运行
6 从命令行Building项目
2. 在命令行使用汇编器
armasm -list addreg.lst addreg.s armlink addreg.o -o addreg 在Debugger中运行程序:
3.把新对象链接到应用中 。
5. ARMC/C++库注意事项
ARM C/C++运行库是以二进制形式提供的 用户不能修改ARM C/C++运行库 一般情况下,在建立基于特定目标的应用程序
时,只需要重新实现ARM C运行库中很少一部 分函数
6. 用户自定义库
ARM的库管理工具armar可以把一系列ELF对 象文件收集到一起,并在库中进行维护。
ARM目标的一个机 制,联系应用代码 到debuger所在宿主 机的I/O请求。它允 许C库函数使用主 机上的显示和键盘 功能。
4. 建立一个使用ARM C库的应用
使用 main()函数创建嵌入式应用程序. 自动创建一C or C++ 能执行的环境,包括了以
下操作:
创建一个 stack 如果需要,创建一个 heap 初始化一部分标准ARM C库中的函数
基于ARM的 嵌入式软件开发
1. 基于ARM的嵌入式系统软件开发流程 2. ADS1.2开发工具介绍 3. ARM系统编程库
2.1 基于ARM的嵌入式系统 软件开发流程
嵌入式软件开发流程
工程建立 源文件 编译 调试
固化
汇编代码 *.s C程序 *.c
链接脚本文件 *.ld 存储映像文件 *.map 命令脚本文件 *.cs
CodeWarrior IDE 使用
1 建立新项目(Project) 2 添加源文件到项目中 3 设置项目的编译目标 4 编译该项目 5 Debug编译连接通过的项目
1. 建立新项目(Project)
1.2 添加源文件到项目中
3 设置项目的编译目标
4 编译该项目
选择 Project ->Make菜单选项,完成下述功 能:
对于特定目标的嵌入式应用系统,用户自定义 库是不可缺少的,一般针对特定硬件的底层应 用的开发来编制驱动库函数。
7. C与汇编混合编程及ATPCS
混合编程的两种方式:
内嵌汇编
适用于汇编代码简单的情况,可直接嵌入到C语 言程序中
将C和汇编分别加到项目中,通过ATPCS来 完成相互调用。
汇编代码复杂。
实现你自己的semihosting SWI 软中断处理
4.2 建立一个non-semihosted 环境应用
1创建源代码实现目标相关的应用 2. 在源代码中添加__use_no_semihosting_swi
保护:
汇编中:添加
__use_no_semihosting_swi
C中添加
#pragma import(__use_no_semihosting_swi).
1. 创建一个可执行的映像文件 2. 运行 AXD, 选择File→ Load Image 3. 选择 Execute → Go (或者按 F5),相关文件的处
理器视图被打开,并在缺省断点处停止
4. 若要重复执行程序,选择File → Reload Current Image ,然后重复执行 then repeat Steps 2,3步骤
2.选择 Execute → Go (或者按 F5)到main()
3. 按F5 执行到添加的断点 4. System Views →Watchpoints,在 Watchpoints
system View中点右键,选Add,对Watchpoints 属性进行编辑。
4. 测试变量内容
1. 使用Variables processor view察看变量信息
8.1 内嵌汇编
语法格式: __asm(“ 汇编指令 ”)
或者:
__asm { 指令1是 C语言的表达式,可以是 char、short、int等类型的 无符号数。
C程序中的标号可被内嵌 的汇编指令使用
内嵌汇编不支持用于内存 分配的伪操作
8.2 ATPCS—ARM-Thumb Procedure Call Stantard
程序自动支持ISO-defined functions 的使用 能够捕获 runtime errors 和signals ,还能够终止
出错程序的执行或使程序正常退出。
4.1 建立一个使用semihosted 环境应用
需要提供下面两者之一的执行环境:
使用缺省提供的标准 semihosting 函数 ,如 ARMulator, Angel, and Multi-ICE
2 添加断点
1. 选择File → Reload Current Image ,
2.选择 Execute → Go (或者按 F5), 3.添加断点的三种方法:
右键点击行,从弹出Menu中选 Toggle Breakpoint 左键点击行,按F9, 双击行的Margin部分
4.选择 System Views →Breakpoints 编辑断点 5. 按F5 恢复执行加断点后的程序
软件开发的主要流程
操作的两个环节:
编辑与编译链接代码排错环节 软件代码Debug和固化环节 ADS CodeWarrior IDE环境下进行编辑、编译与排错; 在AXD环境下进行代码的固化与Debug。
2.2 ADS 1.2 开发工具介绍
CodeWarrior IDE AXD Debuger
编译新添加或修改过和touch过的源文件,产生 ELF对象文件;
连接对象文件和库,产生一个ELF image文件; 执行postlink操作,如将ELF 映像文件用fromELF
工具转换成另外一种格式;
5 Debug编译链接通过的项目
缺省情况下,IDE会调用AXD调试器对Make通 过的ELF image文件进行debug。选择Project >Debug
2 添加断点
4.选择 System Views →Breakpoints 编辑断点
设置循环运行断点750次后触发断点,程序停止。 Processor Views → Variables ,检查run_Index值。
5. 按F5 恢复执行加断点后的程序
3. 添加观察点
1.选择File → Reload Current Image
7. 测试内存内容
1.选择File → Reload Current Image
2.选择 Execute → Go (或者按 F5),允许到缺 省断点Main
3. 按F5 执行到断点
4. Processor Views → Memory 5.按F10单步执行,这时每一步产生的变量变
化将反映在registers窗口中。
相关主题