02嵌入式linuxC语言开发工具

上传人:zw****58 文档编号:54236131 上传时间:2018-09-09 格式:PPT 页数:63 大小:565KB
返回 下载 相关 举报
02嵌入式linuxC语言开发工具_第1页
第1页 / 共63页
02嵌入式linuxC语言开发工具_第2页
第2页 / 共63页
02嵌入式linuxC语言开发工具_第3页
第3页 / 共63页
02嵌入式linuxC语言开发工具_第4页
第4页 / 共63页
02嵌入式linuxC语言开发工具_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《02嵌入式linuxC语言开发工具》由会员分享,可在线阅读,更多相关《02嵌入式linuxC语言开发工具(63页珍藏版)》请在金锄头文库上搜索。

1、嵌入式应用程序设计 第二章 嵌入式Linux C语言程序开发工具,2,2.1嵌入式Linux下C语言概述 2.2 编辑器vim 2.3 编译器gcc 2.4 调试器GDB 2.5 make工程管理器 2.6 autotools(不讲) 2.7小结,本章课程:,3,2.1嵌入式Linux下C语言概述,嵌入式Linux程序设计以C语言为主体,还涉及到shell编程,php/python脚本编程等 C语言最早是由贝尔实验室的Dennis Ritchie为了UNIX的辅助开发而编写的,它是在B语言的基础上开发出来的。尽管语言不是专门针对UNIX操作系统或机器编写的,但它与UNIX系统的关系十分紧密。由

2、于它的硬件无关性和可移植性,使C语言逐渐成为世界上使用最广泛计算机语言。 ANSI C标准,流行的C语言编译系统以它为基础,4,2.1 嵌入式Linux下C语言概述,C语言有如下特点: C语言是“中级语言”。它把高级语言的基本结构和语句与低级语言的实用性结合起来。可以像汇编语言一样对位、字节和地址进行操作。 C语言是结构化的语言。 C语言功能齐全。指针支持。 C语言可移植性强。,5,2.1嵌入式Linux下C语言概述,嵌入式Linux C程序开发环境 编辑器(vim) 编译链接器(gcc) 词法、语法和语义分析,中间代码的生成与优化,符号表管理,出错处理等 调试器(gdb) 项目管理工具(Ma

3、ke) 自动化控制与管理编译过程,使程序员将精力集中在代码编写上善于调试代码,解决Bug是优秀程序员的必备能力,6,2.2 编辑器vim,2.2.1 vi的基本模式 2.2.2 vi的基本操作,7,2.2.1 vi的基本模式,标准模式(Normal mode) 通常进入vim后默认处于标准模式(或者称为命令模式)。在此模式下任何键盘的输入都是作为命令来对待。命令的输入通常是不回显的,只显示执行的结果。 插入模式(Insert Mode) 用户只有在插入模式下才可以进行字符输入,用户按Esc键可回到命令行模式下。 命令行模式(Command-line mode) 在此模式下,用户可以将文件保存或

4、退出vim,也可以设置编辑环境,如寻找字符串、列出行号等。 可视模式(Visual mode) 在此模式下,通过移动光标选择文本,选中的文本将反白显示,这样提供高效、直观的编辑功能。用户按下ESC键可回到命令行模式。,8,2.2.2 vi的基本操作,1. vim的进入、保存和退出 进入vim可以直接在命令终端下键入vim 文件名,vim可以自动载入所要编辑的文件或是开启一个新的文件。如在shell中键入vim hello.c(新建文件)则可进入vim环境。进入vi后屏幕左方会出现波浪符号,凡是具有该符号就代表此列目前是空的。此时进入的是命令行模式。 要退出vim可以在命令行模式下键入“:q”(

5、不保存并退出)或“:q!”(不保存并强制退出)或“:wq”(保存并退出)指令则是保存之后再离开(注意冒号)。,9,2.2.2 vi的基本操作,10,2.2.2 vi的基本操作,2. 光标的移动 除了使用标准光标键移动光标之外,vim还提供了很多复杂的光标移动方式。,11,2.2.2 vi的基本操作,3. 文本编辑 文本编辑包括输入、修改、复制、粘贴、删除(可以用Del键和Backspace键)和恢复等操作 。,12,2.2.2 vi的基本操作,4. 查找与替换 vim的查找和替换功能都支持正则表达式,可以匹配非常复杂的关键字,功能非常强大。,13,Vim的使用技巧重在积累,14,2.3 编译器

6、gcc,2.3.1 GCC的简介 2.3.2 GCC的编译流程 2.3.3 GCC的常用编译选项,15,2.3.1 GCC的简介,GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C+和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C+、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言 gcc又是一个交叉平台编译器,支持的硬件平台很多,如alpha、arm、avr、hppa、i386、m68k、mips、powerpc、sparc、vxworks、x86_64、MS Windows、OS

7、/2等等。它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。,16,2.3.1 GCC的简介,gcc的编译流程分为了4个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking),17,18,2.3.1 GCC的简介,GCC使用的基本语法为:gcc option | filename,19,2.3.2 GCC的编译流程,预处理阶段 处理的主要作用是通过预处理的内建功能对一些可预处理资源进行等价替换,最常见的可预处理资源有:文件包含、条件编译、布局控制和宏处理等。,20,

8、文件包含:#include是最为常见的预处理,主要将指定的文件代码组合到源程序代码之中。 条件编译:#if、#ifdef、#ifndef、#if defined、#endif、#undef等也是常用的预处理,主要是在编译时进行选择性编译,有效地控制版本和编译范围,防止对文件的重复包含等重要功能。 布局控制:#progma功能因后面的参数不同而不同,例如 使用#progma pack(1)可以内存变量的1个字节对齐,使得结构变量的成员分配到连续的内存块,等价于_attribute_(packed)。 宏替换:#define的主要功能是定义符号常量、函数功能、重新命名、字符串符号的拼接等各种功能。

9、 其他的预处理有:#line是用于修改预定义宏_LINE_(当前所在的行号)和_FILE_(当前源文件的文件名);#error / #warning分别用于输出一个错误/警告信息;等等。,21,gcc的选项“-E”可以使编译器在预处理结束时就停止编译,选项“-o”是指定GCC输出的结果,其命令格式为如下所示。 gcc E o 目标文件 编译文件 例如: $ gcc E o hello.i hello.c查看hello.i,分析宏处理,22,2.3.2 GCC的编译流程,编译阶段 编译器在预处理结束之后,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,就

10、开始把代码翻译成汇编语言,gcc的选项“-S”能使编译器在进行汇编之前就停止。 由表2.6可知,“.s”是汇编语言原始程序,因此,此处的目标文件就可设为“.s”类型。 $ gcc S o hello.s hello.i,23,2.3.2 GCC的编译流程,汇编阶段 汇编阶段是把编译阶段生成的“.s”文件生成目标文件,读者在此使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。如下所示。 $ gcc c hello.s o hello.o,24,2.3.2 GCC的编译流程,链接阶段。 完成了链接之后,gcc就可以生成可执行文件,其命令如下所示。 $ gcc hello.o o

11、hello 运行该可执行文件,出现正确的结果。 $ ./hello hello, embedded world库函数printf的实现在libc.so.6中 最简单的程序也用到了系统函数库(C运行时库) 理解这个编译的过程是撰写Makefile的基础,25,2.3.3 gcc的常用编译选项,gcc有超过100个的可用选项,包括总体选项、警告和出错选项、优化选项和体系结构等相关选项。 (1)常用选项,26,-I的理解 改为:#include “my.h”,27,2.3.3 gcc的常用编译选项,(2)库相关选项,28,使用函数库作为程序模块,动态库重用性强,升级方便 函数库能够节省内存和存储器的

12、资源 静态库(.a后缀)是一系列的目标文件的归档,静态链接时,静态库中的目标文件会被复制到程序的可执行文件中去 动态库(libname.so.major.minor.release)不具有“复制”操作,程序运行时载入。动态库可以实现共享,也称为共享库,易于升级,29,静态库例子 动态库例子 动态库的搜索路径,LD_LIBRARY_PATH环境变量,/etc/ld.so.conf软件依赖库,xxx-devel.rpm,包含了头文件和库文件 理解-I,-L非常重要,30,2.3.3 gcc的常用编译选项,(3)警告和出错选项,31,写代码过程中,消除所有警告,保证代码规范,32,2.3.3 gcc

13、的常用编译选项,(4)优化选项 gcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比较典型的范围是从0变化到2或3开发调试过程中,关闭优化 产品最终发行时,开启优化,33,2.3.3 gcc的常用编译选项,(5)体系结构相关选项,34,2.4 调试器GDB,GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具,它是一种强大的命令行调试工具。一个合格的调试器需要有以下几项基本功能。 能够运行程序,设置所有能影响程序运行的参数。 能够让程序让指定的条件下停止。

14、 能够在程序停止时检查所有参数的情况。 能够根据指定条件改变程序的运行。Debug是一门艺术,35,2.4.1 gdb使用流程,进入GDB gdb test 查看文件l 设置断点 b 6 查看断点处情况 info b 运行代码 r 查看变量值 p n / p i 单步运行 n 恢复程序运行 c 观察变量 watch n 退出GDB q,36,例子,37,2.4.2 gdb基本命令,1工作环境相关命令,38,2.4.2 gdb基本命令,2设置断点与恢复命令,39,2.4.2 gdb基本命令,3gdb中源码查看相关命令,40,2.4.2 gdb基本命令,4gdb中查看运行数据相关命令,41,f o

15、rmat: x, u, d, o, s, Size (单位) u, b, h, w, g,42,2.4.2 gdb基本命令,5gdb中修改运行参数相关命令 gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set 变量设定值”。,43,2.4.3 gdbserver远程调试,使用交叉调试工具实现远程调试。 gdb调试器提供了两种不同的远程调试方法,即stub(插桩)方式和gdbserver方式。 gdbserver本身的体积很小,能够在具有很小内存的目标系统上独立运行,因而非常适合嵌入式开发。 stub方式则需要通过链接器把调试

16、代理和要调试的程序链接成一个可执行的应用程序文件,而且stub需要修改异常处理和驱动程序等。 gdbserver要求宿主机和目标系统采用同一系列的操作系统,而stub没有这种限制,甚至目标系统可以没有操作系统。gdbserver比较适合于调试嵌入式平台上的应用程序,而stub比较适合于调试bootloader和内核等系统程序。,44,2.4.3 gdbserver远程调试,用gdb+gdbserver的方式调试嵌入式平台上的Linux应用程序 安装arm-linux-gdb 安装gdbserver 远程调试上机过程中演示讲解,45,2.5 make工程管理器,2.5.1 Makefile基本结构 2.5.2 Makefile变量 2.5.3 Makefile规则 2.5.4 make管理器的使用,46,大的代码量(*.c,*.h) 希望有一个方法,可以自动识别发生更新的文件,避免输入繁琐的命令来完成编译让程序员把注意力放在“代码本身”,而不是“编译代码”上,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号