1 / 54

回 顾

回 顾. 第二章 基于 ARM 的 嵌入式软件开发. 1. 基于 ARM 的嵌入式系统软件开发流程 2. ADS1.2 开发工具介绍 3. ARM 系统编程库. 2.1 基于 ARM 的嵌入式系统软件开发流程. 嵌入式软件开发流程. 工程建立. 汇编代码 * .s. 源文件. C 程序 * .c. 编译. 链接脚本文件 * .ld. 存储映像文件 * .map. 调试. 命令脚本文件 * .cs. 固化. 软件开发的主要流程. 操作的两个环节: 编辑与编译链接代码排错环节 软件代码 Debug 和固化环节

kassia
Download Presentation

回 顾

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 回 顾

  2. 第二章 基于ARM的 嵌入式软件开发 1. 基于ARM的嵌入式系统软件开发流程 2. ADS1.2开发工具介绍 3. ARM系统编程库

  3. 2.1 基于ARM的嵌入式系统软件开发流程

  4. 嵌入式软件开发流程 工程建立 汇编代码 *.s 源文件 C程序 *.c 编译 链接脚本文件 *.ld 存储映像文件 *.map 调试 命令脚本文件 *.cs 固化

  5. 软件开发的主要流程 • 操作的两个环节: • 编辑与编译链接代码排错环节 • 软件代码Debug和固化环节 • ADS CodeWarrior IDE环境下进行编辑、编译与排错; • 在AXD环境下进行代码的固化与Debug。

  6. 2.2 ADS 1.2 开发工具介绍 CodeWarrior IDE AXD Debuger

  7. CodeWarrior IDE 使用 • 1 建立新项目(Project) • 2 添加源文件到项目中 • 3 设置项目的编译目标 • 4 编译该项目 • 5 Debug编译连接通过的项目

  8. 1. 建立新项目(Project)

  9. 1.2 添加源文件到项目中

  10. 3 设置项目的编译目标

  11. 4 编译该项目 • 选择 Project ->Make菜单选项,完成下述功能: • 编译新添加或修改过和touch过的源文件,产生ELF对象文件; • 连接对象文件和库,产生一个ELF image文件; • 执行postlink操作,如将ELF 映像文件用fromELF工具转换成另外一种格式;

  12. 5 Debug编译链接通过的项目 • 缺省情况下,IDE会调用AXD调试器对Make通过的ELF image文件进行debug。选择Project ->Debug

  13. 6 从命令行Building项目 • 1. 从命令行来使用编译器

  14. 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 只进行编译 • 2). 链接映像文件 • armlink main.o -o embed.axf • 其中: • -o 指定链接输出文件名 embed.axf. • 3). 用 armsd or AXD 载入映像进行调试运行

  15. 6 从命令行Building项目 • 2. 在命令行使用汇编器 • armasm -list addreg.lst addreg.s • armlink addreg.o -o addreg • 在Debugger中运行程序: • armsd addreg • step

  16. 2. AXD Debuger的使用 运行程序 添加断点 添加观察点 测试变量内容 测试寄存器 测试内存内容

  17. 是一个Benchmark 程序, 用来测试系统的整形运算处理性能的高低。 用Dhrystone性能进行描述,计算方法如下: Dhrystones/秒=处理器时钟 * 执行次数)/运行时间 在Demo中,最小运行时间不能小于2秒钟。 MIPS△: 业界用来衡量计算机系统性能的相对比较量。将VAX 11/780 作为一个参考机,其性能为1 MIP. VAX 11/780 每秒钟能够完成1757 Dhrystones . DEMO 程序功能介绍

  18. 1 运行程序步骤 • 1. 创建一个可执行的映像文件 • 2. 运行 AXD, 选择File→ Load Image • 3. 选择 Execute → Go (或者按 F5),相关文件的处理器视图被打开,并在缺省断点处停止 • 4. 若要重复执行程序,选择File → Reload Current Image,然后重复执行then repeat Steps 2,3步骤

  19. 2 添加断点 • 1. 选择File → Reload Current Image, • 2.选择 Execute → Go (或者按 F5), • 3.添加断点的三种方法: • 右键点击行,从弹出Menu中选 Toggle Breakpoint • 左键点击行,按F9, • 双击行的Margin部分 • 4.选择 System Views →Breakpoints编辑断点 • 5. 按F5 恢复执行加断点后的程序

  20. 2 添加断点 • 4.选择 System Views →Breakpoints编辑断点 • 设置循环运行断点750次后触发断点,程序停止。 • Processor Views → Variables ,检查run_Index值。 • 5. 按F5 恢复执行加断点后的程序

  21. 3. 添加观察点 • 1.选择File → Reload Current Image • 2.选择 Execute → Go (或者按 F5)到main() • 3. 按F5 执行到添加的断点 • 4. System Views →Watchpoints,在Watchpoints system View中点右键,选Add,对Watchpoints属性进行编辑。

  22. 4. 测试变量内容 • 1. 使用Variables processor view察看变量信息 • 1.选择File → Reload Current Image • 2.选择 Execute → Go (或者按 F5),允许到缺省断点Main • 3. 按F5 执行到断点 • 4. Processor Views → Variables打开变量窗口。窗口中可以察看Local和Global等变量。 • 5.右击窗口,选Properties…→Dec,显示变量十进制。 • 6.按F10,相当于选择Execute → Step单步执行,这时每一步产生的变量变化将反映在variables窗口中

  23. 5 测试变量内容(2) • 2. 察看变量的地址和内容 • 1~3. 同前 • 4. Processor Views → Watch打开Watch窗口。窗口可在多个Tab页中察看变量内容 • 5.点右键,选Add Watch,打开Add Watch窗口,可以添加需要观察变量 • 6.按F10,相当于选择Execute → Step单步执行,这时每一步产生的变量变化将反映在variables窗口中

  24. 6. 测试寄存器 • 1.选择File → Reload Current Image • 2.选择 Execute →Go (或者按 F5),允许到缺省断点Main • 3.Processor Views →Registers打开寄存器窗口 • 4.按F10单步执行,这时每一步产生的变量变化将反映在registers窗口中。

  25. 7. 测试内存内容 • 1.选择File → Reload Current Image • 2.选择 Execute → Go (或者按 F5),允许到缺省断点Main • 3. 按F5 执行到断点 • 4. Processor Views → Memory • 5.按F10单步执行,这时每一步产生的变量变化将反映在registers窗口中。

  26. 8. 修改内存内容 • 1.选择File → Reload Current Image • 2.选择 Execute → Go (或者按 F5),允许到缺省断点Main • 3. 从Search → Memory显示查找内存对话框 • 4. 双击内存窗口中的内容可以对其进行修改。 • 5. 按F5可按修改后的内容继续运行程序。

  27. 2.3 ARM系统编程库环境 1. 标准ARM C/C++运行库 2. Semihosting机制 3. 建立一个基于ARM C库的应用 4. ARM的混合编程

  28. 1. C/C++ 编程环境 • 如何能够在嵌入式系统开发中熟练正确的运用C语言开发高质量的应用程序是关键 • 嵌入式应用开发经常会用到: • 标准ARM库; • 用户自定义库; • C与汇编的混合编程(ATPCS)

  29. 2. 标准ARM C/C++运行库 • ARM开发工具提供两个运行库: • ANSIC C:提供ISO 的C库函数。库文件所在路径: 安装目录\lib\armlib • C++ :提供ISO C++ 标准库。库文件所在路径 安装目录\lib\cpplib • 两个标准ARM库使用ARM的semihosted环境运行,如文件的I/O操作。 • semihosted环境对ARMulator和Multi-ICE等都提供支持

  30. ANSIC C库包含: 由ISO C library standard定义的函数. 在semihosted执行环境下用来实现C库函数的目标依赖的函数,可以根据应用的需要重新定义这些函数 被C / C++ compilers使用的help函数. C++ 库包含: Rogue Wave Standard C++ Library version 2.01.01 C++ compiler使用的help函数 其它未被 Rogue Wave library支持的C++ 函数 2. 标准ARM C/C++运行库

  31. 3. Semihosting 机制 • ARM目标的一个机制,联系应用代码到debuger所在宿主机的I/O请求。它允许C库函数使用主机上的显示和键盘功能。

  32. 4. 建立一个使用ARM C库的应用 • 使用 main()函数创建嵌入式应用程序. • 自动创建一C or C++ 能执行的环境,包括了以下操作: • 创建一个 stack • 如果需要,创建一个 heap • 初始化一部分标准ARM C库中的函数 • 程序自动支持ISO-defined functions 的使用 • 能够捕获 runtime errors 和signals ,还能够终止出错程序的执行或使程序正常退出。

  33. 4.1 建立一个使用semihosted 环境应用 • 需要提供下面两者之一的执行环境: • 使用缺省提供的标准 semihosting 函数 ,如ARMulator, Angel, and Multi-ICE • 实现你自己的semihosting SWI 软中断处理

  34. 4.2 建立一个non-semihosted 环境应用 • 1创建源代码实现目标相关的应用 • 2. 在源代码中添加__use_no_semihosting_swi 保护: • 汇编中:添加 __use_no_semihosting_swi • C中添加 #pragma import(__use_no_semihosting_swi). • 3.把新对象链接到应用中 。

  35. 5. ARMC/C++库注意事项 • ARM C/C++运行库是以二进制形式提供的 • 用户不能修改ARM C/C++运行库 • 一般情况下,在建立基于特定目标的应用程序时,只需要重新实现ARM C运行库中很少一部分函数

  36. 6. 用户自定义库 • ARM的库管理工具armar可以把一系列ELF对象文件收集到一起,并在库中进行维护。 • 对于特定目标的嵌入式应用系统,用户自定义库是不可缺少的,一般针对特定硬件的底层应用的开发来编制驱动库函数。

More Related