1 / 217

嵌入式系统程序设计

嵌入式系统程序设计. 大连理工大学软件学院 嵌入式系统工程系 赖晓晨. 高级语言编写 的源代码文件 主机系统 目标处理器的 汇编语言编写 的源代码文件. 交叉编译器. 目标文件. 目 标 系 统. 连接器 / 加载器. 目标文件. 交叉汇编器. 目标文件. 交叉开发环境. 嵌入式系统软件开发流程. 嵌入式系统开发工具链. ★. ★. ★. ★. 嵌入式系统开发工具链概述 交叉开发环境的建立. 开发环境分类. 开发环境分类: 运行平台:本地开发环境、交叉开发环境 商业角度:收费工具、免费工具. GNU 工具链.

leora
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. 高级语言编写 的源代码文件 主机系统 目标处理器的 汇编语言编写 的源代码文件 交叉编译器 目标文件 目 标 系 统 连接器/ 加载器 目标文件 交叉汇编器 目标文件 交叉开发环境 嵌入式系统软件开发流程

  3. 嵌入式系统开发工具链 ★ ★ ★ ★ • 嵌入式系统开发工具链概述 • 交叉开发环境的建立

  4. 开发环境分类 • 开发环境分类: • 运行平台:本地开发环境、交叉开发环境 • 商业角度:收费工具、免费工具

  5. GNU工具链 • GNU工具链: • GNU Tools:全称(GNU Development Toolchains) • GNU Tools交叉开发环境:全称(GNU Cross-Plateform Development Toolchains) • GNU既支持本地程序开发,又支持交叉编译

  6. GNU开发工具简介 • GNU开发工具 • 自由软件 • 完备的工具链: GCC、binutils、gdb、GNU make、patch、CVS 、开发库 • 命令行方式:使用稍复杂、功能强大 • 下载: www.gnu.org

  7. ARM平台GNU开发工具(续) • 基于ARM9平台的GNU开发工具(linux) • arm-linux-as • arm-linux-gcc • arm-linux-g++ • arm-linux-ld • arm-linux-objcopy • 下载:www.arm.linux.org.uk

  8. GNU Tools开发工具组成 • GNU Tools是linux环境下最主要的开发工具集,主要有以下几个部分: • 编译开发工具:把源程序编译为可执行文件,如gcc。 • 调试工具:对执行程序进行源码或汇编级调试的软件,如gdb。 • 软件工程工具:用于协助多人开发或大型软件项目的管理的软件,如make、cvs等。

  9. 一、Linux开发工具链简介 1. GCC(GNU Compiler Collection) • 支持C、C++、ADA、Object C、Java、Fortran、PASCAL等语言。 • 主要包括: • cpp:GNU C编译器的预处理器。 • gcc:符合ISO标准的C编译器。 • g++:基本符合ISO标准的C++编译器。 • gcj:GCC的java前端。 • gnat:GCC的GNU ADA 95的前端。

  10. 一、Linux开发工具链简介 2. binutils • 是一组二进制工具程序集合,是辅助GCC的主要软件。 • 主要包括: • as:GNU汇编器 • ld:GNU链接器 • ar:创建归档文件,向库中添加/提取obj文件 • nm:列出obj文件中的符号 • objcopy:复制和转化obj文件

  11. 一、Linux开发工具链简介 2. binutils • 主要包括: • objdump:显示对象文件的信息 • ranlib:根据归档文件中内容建立索引 • readelf:显示elf格式执行文件中的各种信息 • size:显示object文件和执行文件各段的总大小 • strings:显示文件中可以打印的字符 • strip:去掉执行文件中多余的信息(如调试信息) • gprof:用来显示图表档案数据

  12. 一、Linux开发工具链简介 • gdb:GNU调试器。可以用来调试C、C++和其他语言编写的程序。如加一些图形前端(如DDD),可以在图形环境下调试程序。 • GNU make:是一个用来控制可执行程序生成过程、从其他源码文件中生成可执行程序的程序。它允许用户生成和安装软件包,而无需了解生成、安装软件包的过程。

  13. 一、Linux开发工具链简介 • diff/diff3/sidff:比较文本差异的工具,也可以用来生成补丁。 • patch:补丁安装程序,可根据diff生成的补丁来更新程序 • 版本控制系统:可以帮助管理程序的历史版本。 • RCS(Revision Control System) • CVS(Concurrent Version System) • SVN(Subversion)

  14. ARM平台GNU开发工具 • 基于ARM7平台的GNU开发工具(uclinux) • arm-elf-as • arm-elf-gcc • arm-elf-g++ • arm-elf-ld • arm-elf-objcopy

  15. 二、GNU交叉开发环境的建立 • 编译源码配置安装GNU交叉开发环境。 • 源码包下载 • 解压缩 • 建立配置目录 • 配置 • 直接安装二进制形式的工具链 • 编译 • 安装 • 测试

  16. 二、GNU交叉开发环境的建立(续) • 1. 从GCC的网(http://gcc.gnu.org/)下载资源 • 供下载的文件有两种形式(格式不同,内容一致): gcc-4.1.1.tar.gz gcc-4.1.1.tar.bz2

  17. 二、GNU交叉开发环境的建立(续) • 2. 解压缩 • 在当前目录下生成名为gcc-4.1.1的源码目录 • 文件gcc-4.1.1/INSTALL/index.html包含了安装gcc4.1.1的详细说明。

  18. 二、GNU交叉开发环境的建立(续) • 3. 建立配置目录 • 建立一个和目录gcc-4.1.1同级的目录,命名为gcc-conf,作为保存配置文件的目录

  19. 二、GNU交叉开发环境的建立(续) • 4. 配置 • 配置通过执行如下脚本 • cd gcc-conf • ../gcc-4.1.1/configure --prefix=/usr/local/gcc-4.1.1 --enable-threads --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-language=c,c++

  20. 二、GNU交叉开发环境的建立(续) • 5. 编译 • 在配置目录下执行make命令 • 6. 安装 • 在配置目录下执行make install指令,即可将编译好的可执行文件复制到安装目录下

  21. 二、GNU交叉开发环境的建立(续) • 7. 测试 • 切换到安装目录下,执行./gcc,显示"no input file",表示安装成功 • 对于编译好的工具链来说 • 图见下页 #mkdir -p /usr/local/arm #cd /usr/local/arm #tar -xjvf cross-2.95.3.tar.bz2 #./arm-linux-gcc -v

  22. 二、GNU交叉开发环境的建立(续)

  23. 编辑器 ★ ★ • 操作模式 • 进入和退出vi • 光标移动 • 删除文本 • 查找和替换 • 复制和粘贴 • 保存文本块 • 与shell交互

  24. vi简介 • linux编辑器:ex、edit、ed、vi、emacs • vi(visual interface):是一个功能强大的,快速命令驱动的全屏幕编辑器。类比DOS的edit • vi和vim

  25. 一、操作模式 • vi具有两种基本的操作模式 • 命令模式(指令模式):此模式下的按键当作指令来处理。 • 输入模式:可进行文本的录入。

  26. 一、操作模式(续) • 切换到输入模式的命令(输入文本位置不同) • 新增:‘a’,从从当前光标之后输入文本。‘A’,从光标所在行末尾输入新的文本。 • 插入:‘i’,从光标前开始插入文本。‘I’,从光标所在行的第一个非空格字符前开始插入文本。 • 开始:‘o’,从光标所在行下新增一行并进入输入模式。‘O’,从光标所在行上新增一行并进入输入模式。 • 从输入模式按esc进入命令模式

  27. 二、进入和退出vi • 进入vi,在提示符下: • vi • vi 文件名 • 退出vi,在指令模式下: • :q,退出 • :wq,存盘后退出 • :q!,不存盘强制退出 • :x,强制存盘退出 以冒号开始的命令要回车后才能执行

  28. 三、光标移动 • 基本移动: • h:向左移动一列 • j或+ :向下移动一列 • k或-:向上移动一列 • l:向右移动一列 • nh,nj,nk,nl表示按某方向移动n行(列),任何模式下,方向箭头可以控制方向

  29. 三、光标移动(续) • 移动多个位置: • :n回车:将光标移动到第n行 • :$回车或L:将光标移动到最后一行 • M:将光标移动到当前屏幕中央行 • H:将光标移动到当前屏幕第一行

  30. 三、光标移动(续) • 按单词移动: • w:将光标移动到下一个单词头 • b:将光标移动到前一个单词头 • e:将光标移动到下一个单词尾 • 组合:nw、nb、ne

  31. 三、光标移动(续) • 按字符移动: • $:将光标移动到当前末尾 • ^或0:将光标移动到当前行首 • n|:将光标移动到当前行的第n个字符 • fm:将光标移动到当前行的下一个字符m处 • 光标返回原处 • 两个单引号‘’

  32. 三、光标移动(续) • 翻页: • Ctrl+d:下翻半屏 • Ctrl+u:上翻半屏 • Ctrl+f:下翻一屏 • Ctrl+b:上翻一屏 • 显示和取消行号 • :set number:显示行号 • :set nonumber:取消显示行号

  33. 四、删除文本 • 指令模式下: • x:删除光标处的一个字符 • dd:删除光标所在行 • r:修改光标所在字符 • R:进入改写状态 • s:删除光标所在字符,并进入输入状态 • S:删除光标所在行,并进入输入状态

  34. 四、删除文本(续) • 指令模式下: • dw:删除单词 • D:删除从光标到行末的所有字符 • dfm:删除从光标到第一个字符m间的文本 • :nd:删除第n行 • :n,$d:删除从第n行到最后一行,n为数字

  35. 五、查找和替换 • 指令模式下: • /string:从当前位置向前查找字符串string • ?string:从当前位置向后查找字符串string • 继续查找: • n:沿前述查找方向继续查找同一字符串 • N:沿前述查找方向的反方向继续查找同一字符串

  36. 五、查找和替换(续) • 继续查找: • rm:替换当前字符为m,替换后仍为命令模式 • R:替换当前字符后的一系列字符,替换后变为输入模式 • s:多个字符替换单个字符 • cw:单词替换 • cc:行替换 • C:替换当前行剩余部分 • cfm:低缓当前字符到指定的字符m

  37. 六、复制和粘贴 • 指令模式下: • yy:复制当前行 • dd:剪切当前行(删除) • p、P:粘贴剪切板上的内容到当前行位置

  38. 六、复制和粘贴(续) • 指令模式下: • 把某(几)行复制并粘贴到某行后 :mcopyn 把m行复制并粘贴到第n行后 :m,ncopy $ 把m-n行复制并粘贴到末行后 :.,$ copy 0 把当前行到末行复制并粘贴到文件头 • 把copy改为move即为移动文本块

  39. 七、保存文件块 • 指令模式下: • 保存文本块 :m,n write file:把第m到第n行另存为文件file • 保存文本块,并直接覆盖掉已有(如果有)文件 :n write! file 把第n行强行另存为文件file • 向文件追加文本 :n write >> file 把第n行追加到文件file末尾

  40. 八、与shell交互 • 指令模式下: • 读某文件的内容到当前打开文件 :n read a 把文件a中的内容读到当前打开文件的第n行后 • 在vi中执行shell命令 :!pwd • 在vi中执行shell命令,并把结果添加到vi中 :n read! pwd 把pwd执行结果插入到第n行后

  41. gcc编译器 ★ ★ ★ • GCC简介 • gcc的基本用法 • 警告提示功能 • 代码优化 • 常用选项

  42. 一、GCC简介 • GCC:GNU Compiler Collection • 能够编译c、c++、Object C, 通过前端模块扩展还可支持java、fortran、pascal、ada、modula-3等。 • 提供了30多条警告信息和3个警告级别 • gcc与g++

  43. A. GCC简介 • GCC:GNU Compiler Collection • 能够编译c、c++、Object C, 通过前端模块扩展还可支持java、fortran、pascal、ada、modula-3等。 • 提供了30多条警告信息和3个警告级别 • gcc与g++ gcc和g++的区别在于: 当你的程序中出现using namespace std等带有C++特性的语句时,如果用gcc编译,必须显式指明这个程序要用C++标准库编译。而g++可以直接编译

  44. B. gcc支持的文件

  45. C. gcc是高效的编译器 #include <stdio.h> main() { printf("hello world\n"); } g++编译后 4.6k tc++3编译后 7.8k bc45编译后 53.8k vc6编译后 184k

  46. D. 编译过程 • 用gcc编译程序时,分为四个阶段: • 预处理(pre-processing) • 编译(compiling) • 汇编(assembling) • 链接(linking) • 程序员可以根据需要在任何一阶段停止

  47. 二、gcc的基本用法 • 语法格式: • gcc [option] [filenames] • option为编译器所需要的选项,filenames为相关文件名称 • 举例(单文件) • gcc -o hello hello.c • 把hello.c文件编译为hello

  48. 二、gcc的基本用法(续) • 举例(多文件) • gcc m1.c m2.c -o hello • 把源文件m1.c和m2.c编译链接为可执行文件hello

More Related